- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构——用C语言描述蔡明志第四章链表课件教学.ppt
第4章 链 表 链表 关于链表 单向链表及其插入操作和删除操作 循环链表及其插入操作和删除操作 双向链表及其插入操作和删除操作 链表的应用 关于链表 链表: 链表(linked list)是由许多节点所组成的。 链表的种类: 链表可分为单向链表(single linked list)、循环链表(circular linked list)及双向链表(doubly linked list)。 单向链表 利用数组的方式存放数据时,一般所配置的内存皆会比实际所要的空间多,会造成空间的浪费,而链表就不会,因为链表是根据实际的需要配置内存的。 链表在插入与删除时都比数组简单容易,只要利用指针(pointer)加以处理就可以了。在查找上,数组比链表来得快,因为从数组索引(index)便可得到想要的数据;而链表需要花较多的时间去比较方可找到正确的数据。 链表中的插入与删除操作可分为前端、尾端或是针对某一特定节点三种操作方式。 插入操作示例(1) 插入链表的前端 假设有一个链表B如图4-2所示。有一节点x将插入于链表的前端,其操作步骤如下: (1)x=(struct node *) malloc(sizeof(struct node)),如图4-3所示。 (2)x-next=head-next,如图4-4所示。/* ① */ (3)head-next=x,如图4-5所示。/* ② */ 插入操作示例—步骤示意图 插入链表的前端的操作步骤示意图: 插入操作示例 (2) 插入操作示例—步骤示意图 插入链表的尾端的操作步骤示意图: 插入操作示例(3) 插入在链表某一特定节点的后面 假设有一个单向链表D,按data字段由大到小排列,如图4-10所示。 现在有一个节点ptr的data值为75,要插入到上述链表中。首先必须找到插入的位置,应为80和70之间,因此可用下述程序段执行。 prev=head; this=head-next; while(this !=NULL this-data ptr-data){ prev=this; this=this-next; } 插入操作示例(3) 利用prev和this两个指针来跟踪,prev会紧跟在this节点之后, 如图4-11所示。 接下来将ptr指向的节点插在prev的后面,执行后的结果如图4-12所示。 ptr-next=this; /* ① */ prev-next=ptr; /* ② */ 插入操作示例—步骤示意图 插入链表某一节点后面的操作步骤示意图: 删除操作示例 删除链表的最后节点 假设有一个链表F如图4-17所示。此时必须先跟踪到尾端及尾端的前一个节点在什么地方,步骤如下: (1)执行下列的程序段,得到如图4-18所示的链表F的数据结构图。 p=head-next; while(p-next !=NULL){ /*找出尾端的前一节点prev */ prev=p; p=p-next; } (2)prev-next=NULL,如图4-19所示。 (3)free(p),如图4-20所示。 删除操作示例—步骤示意图 删除链表的最后节点的操作步骤示意图: 两个单向链表相互连接 假设有两个链表A和B,如图4-23所示。将x与y链表合并为z链表,其步骤如下: 1.if(x-next ==NULL) z=y; 表示当x链表为空时,直接将y 链表指定给z链表。 2.if(y-next ==NULL) z=x; 表示当y链表为空时,直接将 x链表指定给z链表。 3.z=x; c=x-next; 执行该条语句后的链表状态如图4-24所示。 4.while(c-next !=NULL) c=c-next; 执行该段语句后的链表状态如图4-25所示。 5.c-next=y-next; 执行该条语句后的链表状态如图4-26所 示。 两个单向链表相互连接示意图 链表反转和链表长度的计算 链表的反转(invert)是将原先的链表首变为链表尾,链表尾变为链表首。若有一个链表是由小到大排列的,只要将该链表反转,即可实现由大到小排列。 链表的长度即链表的节点数目,执行下面的程序段即可算出链表的长度。 p=head-next; while( p !=NULL) { count ++; p=p-nex
您可能关注的文档
最近下载
- 青鸟气体灭火系统全系列产品接线图.pptx VIP
- 快开门式压力容器(蒸压釜)实际操作考核课件[整理].pdf VIP
- 第10课.公共场所的文明素养(课件) 道德与法治统编版三年级上册2025.ppt
- 中国汉语《通用规范汉字表》.docx VIP
- 化水(预处理)技术规范书[1].docx VIP
- 安保服务工作标准及操作规程.pdf VIP
- DB42T 1032-2014绿色食品 猕猴桃生产技术规程.docx VIP
- 棉铃虫的综合防治方法.pptx VIP
- 2019-2020年杭州师范大学考研真题-347心理学专业综合.pdf VIP
- (高清版)DB3603∕T 1-2022 煤矿地表沉陷区监测技术指南.pdf VIP
原创力文档


文档评论(0)