- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构其它形式链表
为什么要学习其他形式的链表? 循环链表 定义 特点 基本形态 循环链表操作 循环链表基本形态 循环链表应用 利用循环链表实现合并两个线性表,使时间复杂度为O(1)。 循环链表应用 利用循环链表实现合并两个线性表,使时间复杂度为O(1)。 双向链表 定义 特点 基本形态 C描述 操作特点 双向链表基本形态 双向链表C描述 双向链表操作特点 双向链表的插入算法 ai-1,ai 双向循环链表 特点:在双向链表的基础上,头结点的直接前驱指针指向最后一个结点,最后一个结点直接后继指针指向头结点,整个链表中有两个环。 双向循环链表基本形态 * 第二章 线性表 ——其它链表 单链表在查询时,只是方便查询结点的直接后继结点。如果查询直接前驱时,需要从头指针开始,顺着next指针域顺次向后寻找,操作受到限制。 循环链表 双向链表 双向循环链表 二叉链表 十字链表 邻接多重表 最后一个结点的链接又指回头结点(或第一个结点)的链表,整个链表形成一个环。 a1 a2 … ... an 1.与单链表相比,操作时判断最后一个结点的条件为:结点的链接是否为头结点。 2.从表中任一结点出发,均可找到表中的其他结点。 循环链表与单链表的操作基本一致,差别仅在于,当遍历链表时,判别当前指针p是否指向表尾结点的终止条件不同。在单链表中,条件是p-next==NULL;而在循环链表中,条件为p-next==L。 ①表空 头结点 L 条件:L-next==L ②表非空 条件:p-next==L …… L p 思考:在循环链表中,设立尾指针而不设立头指针,可以使操作简化。 … ... A … ... B … ... A … ... B 方法:仅需将第一个链表的尾指针指向第二个链表的第一个结点,第二个链表的尾指针指向第一个链表的表头结点,然后释放第二个链表的表头结点。 q p A q=B-next ; p=B-next-next; B-next=A-next; A-next=p; A=B; free(q); 用两个链域表示元素间的逻辑关系,其一指向直接后继,其二指向直接前驱。方便操作。 为克服单链表的单向性的缺点,线性表可采用双向链表存储结点。 双向链表中,p指向某一结点,则有p-next-prior==p和p-prior-next==p,这恰恰体现了双向链表的特性。 ①表空 ②表非空 L 条件:L-next==NULLL-prior==NULL 条件:L-prior==NULLp-next==NULL an L …… a1 a2 an-1 p typedef struct DuLNode { ElemType data; // 数据域 struct DuLNode *prior; // 指向前驱的指针域 struct DuLNode *next; // 指向后继的指针域 } DuLNode, *DuLinkList; 双向链表中,有些操作(ListLength、GetElem、LocateElem)仅涉及一个方向的指针,它们的算法描述和线性链表相同,但“插入” 和“删除”时,需要同时修改两个方向上的指针。 ai-1,e, e,ai 分析:先找到第i-1个结点,p指向它;改变第i-1个结点的后继指针,第i个结点的前驱指针;同时还要改变要插入结点的前驱和后继指针。 实现在双向链表中的第i个结点前插入一个结点。 ai-1 ai e s-next = p-next; p-next = s; s-next-prior = s; s-prior = p; p s ai-1 ai 演示插入过程 ai-1,ai,ai,ai+1 ai-1, ai+1 分析:先找到第i-1个结点,p指向它;改变第i-1个结点的后继指针指向第i+1个结点;同时还要改变第i+1个结点的前驱指针指向第i-1个结点。 双向链表的删除算法 实现在双向链表中删除第i个结点。 ai-1 ai ai+1 p-next = p-next-next; p-next-prior = p; p ai-1 演示删除过程 ①表空 ②表非空 L 条件:L-next==LL-prior==L a1 a2 … ... an L p 条件:p-n
文档评论(0)