欢迎光临散文网 会员登陆 & 注册

数据结构链表的讲解及代码实现!3

2023-08-05 23:43 作者:爱编程的飙尘  | 我要投稿

#include <iostream>


//链表


using namespace std;


typedef struct elemType {

int elemNo;

string elemName;

struct elemType * next;

}elemType,*node;


typedef struct head {

int length;

node next;

}lkListHead;


void initList(lkListHead &head){

cout<<endl<<"初始成功!"<<endl;

head.next = NULL;

head.length = 0;

}


int isPok(lkListHead &head){

cout<<"请输入要操作的位置:";

int p = 1;

cin>>p;

if(p>=1&&p<=head.length){

return p;

}

cout<<"输入的位置不合法!";

return -1;

}


void cleanList(lkListHead &head){

while(head.next){

node p = head.next;

head.next = p->next;

if(p){

cout<<"删除了结点: "<<p->elemNo<<endl;

delete p;

}

}

head.length = 0;

}


void allList(lkListHead &head) { //遍历数据

node p = head.next;

cout<<endl<<"遍历结果如下:"<<endl;

cout<<"elemNo"<<" "<<"elemName"<<endl;

while(p){

cout<<p->elemNo<<" "<<p->elemName<<endl;

p=p->next;

}

p = head.next;

cout<<"当前数据个数为:"<<head.length<<"个"<<endl;

cout<<"head->";

while(p){

cout<<p->elemNo<<"->";

p=p->next;

}

cout<<"^"<<endl;

}


void addList(lkListHead &head, node elem) {//增,头插法

if(elem){

node p = NULL;

p = head.next;

head.next = elem;

elem->next = p;

head.length++;

head.next->elemNo=head.length;//动态改变序号

cout<<"添加成功!"<<endl;

}

}


node setAndGetEmem(int elemNo, string elemName) {

node t = new elemType;

if(t == NULL){

cout<<"内存分配失败!"<<endl;

return t;

}

t->elemNo = elemNo;

t->elemName = elemName;

return t;

}



void delList(lkListHead &head) {//删

int pos = isPok(head);

if(pos == - 1){

cout<<"删除失败!";

return;

}

else {

if(pos == 1){

node t = head.next;

head.next=t->next;

cout<<"删除了结点: "<<t->elemNo<<endl;

delete t;

head.length--;

}

else{

node p = head.next;

for(int i = 1; i<pos-1;i++)

p = p->next;

node t = p->next;

p->next=t->next;

if(t){

cout<<"删除了结点: "<<t->elemNo<<endl;

delete t;

head.length--;

}

}

}

}


void changeList(lkListHead &head) {//改

int pos = isPok(head);

if(pos == -1){

cout<<"失败!";

return;

}

else{

node p = head.next;

for(int i = 1; i<pos;i++)

p = p->next;

cout<<"原编号为: "<<p->elemNo<<" 请输入要修改的编号:"<<endl;

cin>>p->elemNo;

cout<<"原名称为: "<<p->elemName<<" 请输入要修改的名称:"<<endl;

cin>>p->elemName;

cout<<"修改成功!"<<endl;

}

}


node getList(lkListHead &head) {//查

node t;

int pos = isPok(head);

if(pos == -1){

cout<<"失败!";

return t;

}

else{

node p = head.next;

for(int i = 1; i<pos;i++)

p = p->next;

cout<<"查询成功查询结果为:"<<endl;

cout<<"编号为: "<<p->elemNo<<endl;

cout<<"名称为: "<<p->elemName<<endl;

return p;

}

}



void menu (){

cout<<endl<<"\n1.初始化&清除链表\n2.增加数据\n3.删除数据\n4.修改数据\n5.查询数据\n6.遍历数据\n7.清除数据\n8.退出"<<endl;

cout<<"请输入选项: "<<endl;

}


int main() {

lkListHead head; //声明头结点

while(1){

menu();

int choice = 1;

cin>>choice;

switch(choice){

case 1:initList(head);//初始化

break;

case 2:addList(head, setAndGetEmem(1, "test")); //增

break;

case 3:delList(head); //删

break;

case 4:changeList(head); //改

break;

case 5:getList(head); //查

break;

case 6:allList(head); //遍历数据

break;

case 7:cleanList(head); //清除数据

break;

case 8:cout<<"已退出!!";return 0;

default: cout<<"输入有误!"<<endl;

}

}

return 0;

}

数据结构链表的讲解及代码实现!3的评论 (共 条)

分享到微博请遵守国家法律