数据结构其它形式链表讲述

上传人:最**** 文档编号:118120193 上传时间:2019-12-11 格式:PPT 页数:17 大小:300.50KB
返回 下载 相关 举报
数据结构其它形式链表讲述_第1页
第1页 / 共17页
数据结构其它形式链表讲述_第2页
第2页 / 共17页
数据结构其它形式链表讲述_第3页
第3页 / 共17页
数据结构其它形式链表讲述_第4页
第4页 / 共17页
数据结构其它形式链表讲述_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《数据结构其它形式链表讲述》由会员分享,可在线阅读,更多相关《数据结构其它形式链表讲述(17页珍藏版)》请在金锄头文库上搜索。

1、第二章 线性表 其它链表 为什么要学习其他形式的链表? 单链表在查询时,只是方便查询结点的直接后继结点 。如果查询直接前驱时,需要从头指针开始,顺着 next指针域顺次向后寻找,操作受到限制。 循环链表双向链表 双向循环链表二叉链表 十字链表邻接多重表 循环链表 定义 特点 基本形态 最后一个结点的链接又指回头结点(或第一个结点 )的链表,整个链表形成一个环。 a1 a2 . an 1.与单链表相比,操作时判断最后一个结点的条 件为:结点的链接是否为头结点。 2.从表中任一结点出发,均可找到表中的其他结 点。 循环链表操作 循环链表与单链表的操作基本一致,差别仅 在于,当遍历链表时,判别当前指

2、针p是否 指向表尾结点的终止条件不同。在单链表中 ,条件是p-next=NULL;而在循环链表中 ,条件为p-next=L。 循环链表基本形态 表空 头结点 L 条件:L-next=L 表非空 条件:p-next=L L p 循环链表应用 利用循环链表实现合并两个线性表,使时间复杂度为O(1)。 思考:在循环链表中,设立尾指针而不设立头指针,可以使 操作简化。 . A . B 循环链表应用 利用循环链表实现合并两个线性表,使时间复杂度为O(1)。 . A . B 方法:仅需将第一个链表的尾指针指向第二 个链表的第一个结点,第二个链表的尾指针 指向第一个链表的表头结点,然后释放第二 个链表的表头

3、结点。 q p A q=B-next ; p=B-next-next; B-next=A-next; A-next=p; A=B; free(q); 双向链表 定义 特点 基本形态 C描述 操作特点 用两个链域表示元素间的逻辑关系,其一指向直接 后继,其二指向直接前驱。方便操作。 为克服单链表的单向性的缺点,线性表可采 用双向链表存储结点。 双向链表中,p指向某一结点,则有p-next-prior=p和 p-prior-next=p,这恰恰体现了双向链表的特性。 双向链表基本形态 表空 表非空 L 条件:L-next=NULL / 数据域 struct DuLNode *prior; / 指向

4、前驱的指针域 struct DuLNode *next; / 指向后继的指针域 DuLNode, *DuLinkList; 双向链表操作特点 双向链表中,有些操作(ListLength、GetElem、 LocateElem)仅涉及一个方向的指针,它们的算法 描述和线性链表相同,但“插入” 和“删除”时 ,需要同时修改两个方向上的指针。 双向链表的插入算法 , 分析:先找到第i-1个结点,p指向它;改变第i-1 个结点的后继指针,第i个结点的前驱指针;同时 还要改变要插入结点的前驱和后继指针。 实现在双向链表中的第i个结点前插入一个结点。 ai-1ai e s-next = p-next; p

5、-next = s; s-next-prior = s; s-prior = p; p s ai-1ai 演示插入过程 , 分析:先找到第i-1个结点,p指向它;改变第i-1 个结点的后继指针指向第i+1个结点;同时还要改 变第i+1个结点的前驱指针指向第i-1个结点。 双向链表的删除算法 实现在双向链表中删除第i个结点。 ai-1aiai+1 p-next = p-next-next; p-next-prior = p; p ai-1 演示删除过程 双向循环链表 特点:在双向链表的基础上,头结点 的直接前驱指针指向最后一个结点, 最后一个结点直接后继指针指向头结 点,整个链表中有两个环。 双向循环链表基本形态 表空 表非空 L 条件:L-next=L&L-prior=L a1 a2 . an L p 条件:p-next=L&L-prior=p

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

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