2022年创建链表和链表操作 .pdf
#include #include #include #include #define list_size 50 /链表分配存储结构struct node int data; struct node *next; ; /线性表动态分配存储结构typedef struct int *elem; int length; int listsize; list; list la,lb,lc; /输入数据(即创建链表或插入数据)struct node *creatLink(struct node *head) int a; printf( 输入数据: ); do scanf(%d,&a); struct node *p,*q,*q1; q=head-next; p=(struct node *)malloc(sizeof(struct node); if(!p) printf( 开辟空间失败!); p-data=a; if(head-next=NULL) head-next=p; p-next=NULL; else while(p-dataq-data&q-next!=NULL) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - q1=q; q=q-next ; if(p-datadata) if(head-next=q) head-next=p; else q1-next=p; p-next=q; else q-next=p; p-next=NULL; while(getchar()!=n); return(head); /数据删除struct node *del(struct node *head) int a; printf(n 输入要删除的数据,以回车结束!); do scanf(%d,&a); struct node *p,*q; p=head-next; if(head-next=NULL) printf(您还没有输入数据,请先输入!); while(p!=NULL&p-data!=a) q=p; p=p-next; if(p=NULL) printf(n对不起,没有找到您要删除的数据!); else if(p-data=a) if(head-next=p) head-next=p-next; else q-next=p-next; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - free(p); p=NULL; while(getchar()!=n); return(head); /显示数据void show(struct node *head) struct node *k; k=head-next; if(k=NULL) printf(你还没有说输入数据,请先输入); while(k!=NULL) printf(%dn,k-data); k=k-next; /创建线性表la,lb int *creatList(list L,int length) int i; L.elem=(int *)malloc(length*sizeof(int); if(!L.elem) printf( 开辟空间失败); return(0); if(length=0) printf( 此线性表为空表); return(0); printf(n 请按从小到大的顺序输入%d 个元素的值 :n,length); for(i=1;inext=NULL; head1=creatLink(head1); p1=head1-next;/ 创建链表1 head2=(struct node *)malloc(sizeof(struct node); if(!head2) printf( 申请空间出错!); return(0); head2-next=NULL; printf( 创建链表2:n); head2=creatLink(head2); p2=head2-next;/ 创建链表2 p0=p=(struct node *)malloc(sizeof(struct node); if(!p) printf( 申请空间出错); return(0); /p 为合并得到的新链表while(p1&p2) if(p1-datadata) p-next=p1; p=p1; p1=p1-next; else p-next=p2; p=p2; p2=p2-next; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 8 页 - - - - - - - - - while(p2) p-next=p2; p=p2; p2=p2-next; while(p1) p-next=p1; p=p1; p1=p1-next; free(p1); free(p2); printf(nn 合并后的链表为:); p=p0-next; while(p) printf(%d ,p-data); p=p-next; return(0); /顺序表合并int Sqlist_hebing() int a_length=0,b_length=0; int *p,*q; int i,n=0,m=0,c=0; printf( 输入线性表La 的长度: ); scanf(%d,&a_length); p=creatList(la,a_length); printf(n 输入线性表Lb 的长度: ); scanf(%d,&b_length); q=creatList(lb,b_length); system(cls); printf(tt创建的两个线性表为:); printf(nttLa线性表为: ); for(i=1;i=a_length;i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 8 页 - - - - - - - - - printf(%d ,pi-1); printf(nttLb的线性表为: ); for(i=1;i=b_length;i+) printf(%d ,qi-1); /构造一个空表lc lc.elem=(int *)malloc(a_length+b_length)*sizeof(int); if(!lc.elem) printf( 申请空间错误); return(0); / while(na_length&mb_length) if(pn=qm) lc.elemc=pn; n+; c+; else lc.elemc=qm; m+; c+; while(na_length) lc.elemc=pn; n+; c+; while(mb_length) lc.elemc=qm; m+; c+; printf(nn 合并后的顺序表为:); for(i=0;inext=NULL; do system(cls); printf( 请选择下列操作:); printf(nntt1 输入数据2 删除数据 n); printf(ntt3 显示数据4 合并顺序表 n); printf(ntt5 链表合并0 退出系统 n ); scanf(%d,&i); switch(i) case 1: system(cls); head=creatLink(head); break; case 2: system(cls); head=del(head); printf(nn 删除成功,按任意键返回主菜单!); break; case 3:system(cls); show(head); break; case 4: system(cls); Sqlist_hebing(); break; case 5: system(cls); LinkList_hebing(); break; default:exit(0); printf(n 按任意键返回); while(getch()!=0); return(0); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 8 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 8 页 - - - - - - - - -