《C语言链表基本操作.pdf》由会员分享,可在线阅读,更多相关《C语言链表基本操作.pdf(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C C 语语言言链链表表基基本本操操作作(总总 6 6页页)本页仅作为文档封面,使用时可以删除 This document is for reference only-rar21year.March/链表操作链表操作:建立、插入、删除、查找、倒置、删除等基本操作建立、插入、删除、查找、倒置、删除等基本操作/喜洋洋制作喜洋洋制作#include#include#include#include typedeftypedefstructstruct LNode LNode intintdata;data;structstruct LNode*next;LNode*next;LNode,*Llist;
2、LNode,*Llist;LNode*creat_head();LNode*creat_head();/创建一个空表创建一个空表voidvoidcreat_list(LNode*,creat_list(LNode*,intint););/创建一个长度为创建一个长度为 n n 的线性链表的线性链表voidvoid insert_list(LNode*,insert_list(LNode*,int,intint,int););/插入一个元素插入一个元素intintdelete_list(LNode*,delete_list(LNode*,intint););/删除一个元素删除一个元素intintf
3、ound_list(LNode*,found_list(LNode*,intint););/链表查询链表查询voidvoidreverse(LNode*);reverse(LNode*);/倒置整个链表倒置整个链表voidvoid delete_whole(LNode*)delete_whole(LNode*);/;/删除整个链表删除整个链表voidvoid print_list(LNode*);print_list(LNode*);/打印链表打印链表main()main()LNode*head;LNode*head;intint n,n2;n,n2;intintx,i;x,i;intint
4、b;b;charchar temp1,temp2;temp1,temp2;head=creat_head();head=creat_head();printf(printf(请输入链表的节点个数请输入链表的节点个数 n=n=););scanf(%d,&n);scanf(%d,&n);printf(printf(nn 请输入数据:请输入数据:nn););creat_list(head,n);creat_list(head,n);/创建链表创建链表print_list(head);print_list(head);printf(printf(n*n*nn););printf(printf(nn 下
5、面进行链表插入元素下面进行链表插入元素nn););printf(printf(nn 请输入您需要插入的元素请输入您需要插入的元素 x=x=););scanf(%d,&x);scanf(%d,&x);printf(printf(nn 请输入即将插入的位置请输入即将插入的位置 i=i=););scanf(%d,&i);scanf(%d,&i);insert_list(head,x,i);insert_list(head,x,i);/插入元素插入元素print_list(head);print_list(head);printf(printf(n*n*nn););printf(printf(nn 下
6、面进行链表删除元素下面进行链表删除元素nn););printf(printf(nn 请输入即将删除元素的位置:请输入即将删除元素的位置:i=i=););scanf(%d,&i);scanf(%d,&i);b=delete_list(head,i);b=delete_list(head,i);/删除元素删除元素print_list(head);print_list(head);printf(printf(nnnn 成功删除元素:成功删除元素:%d%d,b);,b);printf(printf(n*n*nn););printf(printf(nn 下面进行链表查询下面进行链表查询nn););pri
7、ntf(printf(nn 请输入即将查询的元素:请输入即将查询的元素:x=x=););scanf(%d,&n2);scanf(%d,&n2);if(found_list(head,n2)0)if(found_list(head,n2)0)/链表查询链表查询printf(printf(找到了,在第找到了,在第%d%d 的位置上的位置上,found_list(head,n2);,found_list(head,n2);elseelseprintf(printf(没有找到没有找到!););printf(printf(n*n*nn););printf(printf(nn 是否倒置整个链表是否倒置整个
8、链表 Y/NnY/Nn););fflush(stdin);fflush(stdin);scanf(%c,&temp1);scanf(%c,&temp1);if(Y=temp1)if(Y=temp1)/倒置链表倒置链表 reverse(head);reverse(head);print_list(head);print_list(head);printf(printf(n*n*nn););printf(printf(nn 是否删除整个链表是否删除整个链表 Y/NnY/Nn););fflush(stdin);fflush(stdin);scanf(%c,&temp2);scanf(%c,&temp
9、2);if(Y=temp2)if(Y=temp2)/删除链表删除链表 delete_whole(head);delete_whole(head);printf(printf(nn 成功删除整个链表成功删除整个链表nn););/创建一个空链表创建一个空链表LNode*creat_head()LNode*creat_head()LNode *p;LNode *p;p=(Llist)malloc(sizeof(LNode);p=(Llist)malloc(sizeof(LNode);if if(NULL=p)(NULL=p)printf(printf(内存申请失败!内存申请失败!););elseel
10、se p-next=NULL;p-next=NULL;returnreturn(p);(p);/创建一个长度为创建一个长度为 n n 的线性链表的线性链表voidvoid creat_list(LNode*head,creat_list(LNode*head,intint n)n)LNode*p,*q;LNode*p,*q;intint i;i;p=head;p=head;forfor(i=1;i=n;i+)(i=1;idata););scanf(%d,&q-data);q-next=NULL;q-next=NULL;p-next=q;p-next=q;p=q;p=q;/插入一个元素插入一个元
11、素voidvoid insert_list(LNode*head,insert_list(LNode*head,intint x,x,intint i)i)intint j=0;j=0;LNode*p,*s;LNode*p,*s;p=head;p=head;whilewhile(p!=NULL)&(ji-1)(p!=NULL)&(jnext;p=p-next;j+;j+;if if(p=NULL)(p=NULL)exitexit(0);(0);s=(Llist)s=(Llist)mallocmalloc(sizeofsizeof(LNode);(LNode);if if(NULL=p)(NUL
12、L=p)elseelse printf(printf(内存申请失败!内存申请失败!););s-data=x;s-data=x;s-next=p-next;s-next=p-next;p-next=s;p-next=s;/删除一个元素删除一个元素intint delete_list(LNode*head,delete_list(LNode*head,intint i)i)LNode*p,*q;LNode*p,*q;intint j=0;j=0;intint x;x;p=head;p=head;whilewhile(p!=NULL)&(ji-1)(p!=NULL)&(jnext;p=p-next;
13、j+;j+;if if(p=NULL)(p=NULL)exitexit(0);(0);q=p-next;q=p-next;p-next=q-next;p-next=q-next;x=q-data;x=q-data;free(q);free(q);q=NULL;q=NULL;returnreturn(x);(x);/删除整个链表删除整个链表voidvoid delete_whole(LNode*head)delete_whole(LNode*head)LNode*p,*q;LNode*p,*q;p=head;p=head;whilewhile(p!=NULL)(p!=NULL)q=p-next;
14、q=p-next;free(p);free(p);p=q;p=q;/倒置链表倒置链表voidvoid reverse(LNode*head)reverse(LNode*head)LNode*p,*s,*t;LNode*p,*s,*t;p=head;p=head;s=p-next;s=p-next;whilewhile(s-next!=NULL)(s-next!=NULL)/主要置换过程主要置换过程 t=s-next;t=s-next;s-next=p;s-next=p;p=s;p=s;s=t;s=t;s-next=p;s-next=p;head-next-next=NULL;head-next
15、-next=NULL;/收尾收尾head-next=s;head-next=s;/赋头赋头/打印链表打印链表voidvoid print_list(LNode*head)print_list(LNode*head)LNode*p;LNode*p;forfor(p=head-next;p!=NULL;)(p=head-next;p!=NULL;)printf(printf(%d%d,p-data);,p-data);p=p-next;p=p-next;/链表查询链表查询intint found_list(LNode*head,found_list(LNode*head,intint n)n)LNode*p;LNode*p;intint i=1;i=1;forfor(p=head-next;p!=NULL;)(p=head-next;p!=NULL;)if if(n=p-data)(n=p-data)returnreturn i;i;i+;i+;p=p-next;p=p-next;if if(NULL=p)(NULL=p)returnreturn 0;0;
限制150内