链表的基本操作_第1页
链表的基本操作_第2页
链表的基本操作_第3页
链表的基本操作_第4页
链表的基本操作_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2.链表的基本操作对链表施行的操作有很多种,最基本的操作是在链表中插入结点、在链表中删除结点、在链 表中查找结点等。链表结点的插入在空链表中插入一个结点空链表就是头指针为空的链表。用如下语句申请一个new结点:new=(struct node)calloc(1,sizeof(struct node);为new结点填充数据:将要存储的数据对应传递给new结点数据域的各个成员。修改有关指针的指向:将new的next成员置空,使new结点成为链表的最后一个结点; 将head指向new结点。在链表的结点之后插入一个结点要在链表head的C、D结点之间出入一个new结点,就是将new结点变成C结点的下一

2、 个结点,而new结点的下一个结点为D结点.操作过程为:使new的指针域存储结点D的首地址。使C结点的指针域存储结点new的地址。例2建立学生成绩链表,链表有3个结点。#include #define N 3struct s_nodechar num4;int score;struct s_node *next;;main()structsnode*creat_node(void);/*生成链表结点的函数*/structsnode*creat_list(int n);/*建立链表的函数*/void out_list(struct s_node *head);/*输出链表函数*/struct s

3、_node *head=NULL;head=creat_list(N);out_list(head);struct s_node *creat_node(void)/*生成链表结点的函数*/struct s_node *p;int score;fflush(stdin);p=(struct s_node *)calloc(1,sizeof(struct s_node);gets(p-num);scanf(%d”,&score);p-score=score;p-next=NULL;return(p);/*建立链表的函数*/struct s_node * creat_list(int n)stru

4、ct s_node *new,*p;struct s_node *head;int i;if(n=1)new=creat_node();head=new;p=new;for(i=2;inext=new;p=new;if(n=1)return(head);elsereturn(NULL);void out_list(struct s_node *head)/*输出链表函数*/struct s_node *p;if(head!=NULL)p=head;while(p!=NULL)printf(%s %dn”,p-num,p-score);p=p-next;链表结点的删除从链表中删除结点,就是撤销结

5、点在链表中的链接,把结点从链表中孤立出来。在链表链表 中删除结点一般有两个过程:一是把指定的结点从链表中拿下来,它需要通过修改有关结点 的指针域来完成;二是释放该结点使用的内存空间,它需要使用free()函数来完成。如下是在head链表中删除p结点的delete_p()函数:void delete_p(struct node *head,struct node *p)struct node *q;if(p=NULL)printf(no foundn);return;if(p=head)head=p-next;q=p;elseq=p-next;p-next=q-next;printf(ndele

6、te :%dn,q-data);free(q);链表结点的查找在链表中进行查找,就是从链表的第一个结点开始,沿着指针链,用查找值与链表结点逐个 比较的过程。找到符合要求的结点之后,停止查找过程,返回相应的结点指针,否则返回一 个空指针。例3查找值为x的结点并删除 #include struct node int data;struct node *next;;struct node * creat_number(int n)/*建立链表的函数*/struct node *new,*p;struct node *head;int i;if(n=1)new=(struct node *)mallo

7、c(sizeof(struct node);new-data=1;new-next=NULL;head=new;p=new;for(i=2;idata=i;new-next=NULL;p-next=new;p=new;if(n=1)return(head);elsereturn(NULL);void out_list(struct node *head)/*输出链表函数*/struct node *p;if(head!=NULL)p=head;while(p!=NULL)printf(%dn”,p-data);p=p-next;struct node *find_x(struct node *

8、head,int x)/雍链表中查找的函数*/struct node *p,*q;p=q=head;while(p!=NULL&p-data!=x)q=p;p=p-next;if(p=NULL)return(NULL);elsereturn(q);void delete_p(struct node *head,struct node *p)/*在链表中删除 p 结点的函数*/struct node *q;if(p=NULL)printf(no foundn);return;if(p=head)head=p-next;q=p;elseq=p-next;p-next=q-next;printf(ndelete :%dn,q-data);free(q);main()int n,x;struct node *head=NUL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论