- 1、本文档共72页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
data1 data2 data3 data4 表尾结点 表尾结点:最后一个结点。结点指针域为”NULL”空指针,表示链表结束 头指针:是一个指针变量,用来存放第一个结点的地址 链表各结点之间的顺序关系由指针来确定,并不要求逻辑上相邻的结点物理位置上也相邻(链表不需占用连续的内存空间),依靠指针将它们连接起来。 随着处理数据量的增加,链表可以不受变量定义的限制无限的延长——插入、删除操作简化,只修改结点间的链接 head 头指针 1000 1030 1060 1090 1030 1000 1060 1090 1280 1170 1560 1090 1280 1170 1560 1090 建立和输出链表 结点的数据类型选用结构体类型 typedef struct stud { char num[10]; int score; struct stud *next; } student; 建立链表就是根据需要一个一个地开辟新结点,在结点中存放数据并建立结点之间的链接关系。 例如:写一个函数建立一个有n名学生数据的单向动态链表,并写一个函数打印学生信息。 student * creat(int n) { student *head,*p,*q; int i; if(n0) { head=(student *)malloc(sizeof(student)); printf(please input the no 1 num,score ); scanf(%s%d, head-num,head-score); p=head; for(i=2;i=n;i++) { q=(student *)malloc(sizeof(student)); printf(please input the no %d num,score ,i); scanf(%s%d, q-num,q-score); p-next=q; p=q; } q-next=NULL; } else head=NULL; return head; } /*依次创建其他结点*/ /*创建首结点*/ void output(student * head) { student *p; p=head; while(p!=NULL) { printf(%s,%d\n,p-num,p-score); p=p-next; } } main() { student * head; int n; printf(pleae input n:); scanf(%d,n); head=creat(n); output(head); } /*依次向后移动*/ 链表的查找:在链表中查找某成员值为给定值的结点 遍历+比较,返回值为指针类型(指向查到结点的指针) p p p 21 18 30 75 42 56 ∧ head student *find(student *head) { student *p=head; char num[10]; printf(请输入要查找的学号:); scanf(%s,num); while(p!=NULL) { if(p-num==num) return p; p=p-next; } return NULL; } p-data=30 链表结点的删除:在链表中删除某成员值为给定值的结点 遍历+比较+删除 ai-1 ai ai+1 ai-1 算法: 当要删除的是第一个结点 当要删除的非第一个结点 未找到要删除的结点 技巧:两个指针变量,p指向当前结点,pre为p的前驱结点 链表是 否为空 是,终止程序 否 找到 student * delete_node(student *head, char x[]) { student *p,*pre; pre=p=head; while(p!=NULL strcmp(p-num, x)!=0 ) { pre=p; p=p-next; } if(strcmp(p-num, x)==0 ) { if(p==head) head=p-next; else pre-next=p-next; free(p);
您可能关注的文档
- C语言程序设计(第二版) 教学课件 作者 李丽娟 马淑萍主编 第10章_文件.PPT
- C语言程序设计(第二版) 教学课件 作者 李丽娟 马淑萍主编 第11章 位运算.ppt
- C语言程序设计(第二版) 教学课件 作者 林小茶 C_ch1.ppt
- C语言程序设计(第二版) 教学课件 作者 林小茶 C_ch3.ppt
- C语言程序设计(第二版) 教学课件 作者 林小茶 C_ch4.ppt
- C语言程序设计(第二版) 教学课件 作者 林小茶 C_ch5.ppt
- C语言程序设计(第二版) 教学课件 作者 林小茶 C_ch6.ppt
- C语言程序设计(第二版) 教学课件 作者 林小茶 C_ch7.ppt
- C语言程序设计(第二版) 教学课件 作者 林小茶 C_ch8.ppt
- C语言程序设计(第二版) 教学课件 作者 林小茶 C_ch9.ppt
文档评论(0)