链表的c语言实现②

上传人:zw****58 文档编号:44167501 上传时间:2018-06-08 格式:DOC 页数:4 大小:21.50KB
返回 下载 相关 举报
链表的c语言实现②_第1页
第1页 / 共4页
链表的c语言实现②_第2页
第2页 / 共4页
链表的c语言实现②_第3页
第3页 / 共4页
链表的c语言实现②_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《链表的c语言实现②》由会员分享,可在线阅读,更多相关《链表的c语言实现②(4页珍藏版)》请在金锄头文库上搜索。

1、原创文章来源:原创文章来源: 原创文章来源:原创文章来源:链表的链表的 c 语言实现语言实现二、单链表的基本运算 建立了一个单链表之后,如果要进行一些如插入、删除等操作该怎么办?所以还须掌握一 些单链表的基本算法,来实现这些操作。单链表的基本运算包括:查找、插入和删除。下 面我们就一一介绍这三种基本运算的算法,并结合我们建立单链表的例子写出相应的程序。1、查找 对单链表进行查找的思路为:对单链表的结点依次扫描,检测其数据域是否是我们所要查 好的值,若是返回该结点的指针,否则返回 NULL。 因为在单链表的链域中包含了后继结点的存储地址,所以当我们实现的时候,只要知道该 单链表的头指针,即可依次

2、对每个结点的数据域进行检测。 以下是应用查找算法的一个例子: #include #include #include /*包含一些字符串处理函数的头文件*/ #define N 10 typedef struct node char name20; struct node *link; stud; stud * creat(int n) /*建立链表的函数*/ stud *p,*h,*s; int i; if(h=(stud *)malloc(sizeof(stud)=NULL) printf(“不能分配内存空间!“); exit(0); h-name0=0; h-link=NULL; p=h;

3、 for(i=0;ilink=s; printf(“请输入第%d 个人的姓名“,i+1);原创文章来源:原创文章来源: 原创文章来源:原创文章来源:scanf(“%s“,s-name); s-link=NULL; p=s; return(h); stud * search(stud *h,char *x) /*查找链表的函数,其中 h 指针是链表的表头指针,x 指针是 要查找的人的姓名*/ stud *p; /*当前指针,指向要与所查找的姓名比较的结点*/ char *y; /*保存结点数据域内姓名的指针*/ p=h-link; while(p!=NULL) y=p-name; if(strc

4、mp(y,x)=0) /*把数据域里的姓名与所要查找的姓名比较,若相同则返回 0,即条件成 立*/ return(p); /*返回与所要查找结点的地址*/ else p=p-link; if(p=NULL) printf(“没有查找到该数据!“); main() int number; char fullname20; stud *head,*searchpoint; /*head 是表头指针,searchpoint 是保存符合条件的结点地址的指针 */ number=N; head=creat(number); printf(“请输入你要查找的人的姓名:“); scanf(“%s“,full

5、name); searchpoint=search(head,fullname); /*调用查找函数,并把结果赋给 searchpoint 指针*/ 2、插入(后插) 假设在一个单链表中存在 2 个连续结点 p、q(其中 p 为 q 的直接前驱) ,若我们需要在 p、q 之间插入一个新结点 s,那么我们必须先为 s 分配空间并赋值,然后使 p 的链域存储 s 的地址,s 的链域存储 q 的地址即可。(p-link=s;s-link=q),这样就完成了插入操作。 下例是应用插入算法的一个例子: #include #include #include #define N 10原创文章来源:原创文章来

6、源: 原创文章来源:原创文章来源:typedef struct node char name20; struct node *link; stud; stud * creat(int n) /*建立单链表的函数*/ stud *p,*h,*s; int i; if(h=(stud *)malloc(sizeof(stud)=NULL) printf(“不能分配内存空间!“); exit(0); h-name0=0; h-link=NULL; p=h; for(i=0;ilink=s; printf(“请输入第%d 个人的姓名:“,i+1); scanf(“%s“,s-name); s-link

7、=NULL; p=s; return(h); stud * search(stud *h,char *x) /*查找函数*/ stud *p; char *y; p=h-link; while(p!=NULL) y=p-name; if(strcmp(y,x)=0) return(p); else p=p-link; 原创文章来源:原创文章来源: 原创文章来源:原创文章来源:if(p=NULL) printf(“没有查找到该数据!“); void insert(stud *p) /*插入函数,在指针 p 后插入*/ char stuname20; stud *s; /*指针 s 是保存新结点地

8、址的*/ if(s= (stud *) malloc(sizeof(stud)=NULL) printf(“不能分配内存空间!“); exit(0); printf(“请输入你要插入的人的姓名:“); scanf(“%s“,stuname); strcpy(s-name,stuname); /*把指针 stuname 所指向的数组元素拷贝给新结点的数据域*/ s-link=p-link; /*把新结点的链域指向原来 p 结点的后继结点*/ p-link=s; /*p 结点的链域指向新结点*/ main() int number; char fullname20; /*保存输入的要查找的人的姓名*/ stud *head,*searchpoint; number=N; head=creat(number); /*建立新链表并返回表头指针*/ printf(“请输入你要查找的人的姓名:“); scanf(“%s“,fullname); searchpoint=search(head,fullname); /*查找并返回查找到的结点指针*/ insert(searchpoint); /*调用插入函数*/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号