数据结构——基于Python语言(微课版) 课件T4_线性表(双向链表和循环链表).pptx

数据结构——基于Python语言(微课版) 课件T4_线性表(双向链表和循环链表).pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

双向链表和循环链表第二章:线性表主讲:周翔

什么是双向链表什么是双向链表?

什么是双向链表上一节学习了单链表,但是单链表有一个缺点,无法快速访问前驱结点,当查找到某一个元素时,如果想查找其前驱结点,需要再次从头遍历。因此,有人提出在结点中再添加一个指向前驱的指针,如此便构成了双向链表。

什么是双向链表下图为一个双向链表,表中第一个结点的前驱指针pre指向了NULL,最后一个结点的后继结点next指向了NULL。在双向链表中,通过一个结点可以找到它的后继结点,也可以找到它的前驱结点。

双向链表双向链表:在单链表的每个结点里再增加一个指向其前趋的指针域prior。这样形成的链表中就有两条方向不同的链,我们称之为双(向)链表(DoubleLinkedList)。双链表的结点结构后继指针域predatanext前驱指针域数据域

双向链表双向链表的结构定义:ADTDNode{ //结点类型定义ElemTypedata //数据域Nodepre,next //指针域}ADTDNode,DoubleList

双向链表结点指向p-prep-nextprenextp

双向链表——基本运算前插操作算法描述:欲在双向链表第i个结点之前插入一个的新的结点,则指针的变化情况如图所示。pse......ab①②③④

双向链表——基本运算删除操作算法描述:欲删除双向链表中的第i个结点,则指针的变化情况如图所示。abcp②①……

什么是循环链表什么是循环链表?

循环链表循环链表(CircularLinkedList)是首尾相接的一种链表,它尾结点的后继指针又指向链表的第一个结点,这样形成了一个环。对于循环链表,从表中的任何一个结点出发,能找到其它所有的结点。特点:将单链表最后一个结点的指针域由NULL改为指向头结点或线性表中的第一个结点

La1……ai-1aianLa1……ai-1aianrear*(rear-next)*rear空链表带头结点的一般形式带尾结点的一般形式循环链表

循环单链表假设链表长度为n在表头插入或删除,时间复杂性O(1)在表尾插入或删除,时间复杂性O(n)a1……ai-1aianL带头结点的一般形式

循环单链表假设链表长度为n在表头插入或删除,时间复杂性O(1)在表尾插入或删除,时间复杂性O(1)a1……ai-1aianrear*(rear-next)*rear带尾结点的一般形式所以,在循环单链表中附设尾指针有时比附设头指针会使操作变得更简单

循环单链表——查找查找成功查找不成功LL3131484815155757查找15???查找25????pppppppp

循环链表中没有明显的尾端,如何避免死循环?循环单链表——查找循环条件:p的下一个指针指向表头从循环链表中的任何一个结点的位置都可以找到其他所有结点,而单链表做不到

循环双链表

循环双链表排序循环双链表

总结相对于单链表来说,双向链表要复杂一些,因为它多了一个前驱指针,所以对应插入和删除操作的实现,要格外小心。在插入新元素时,先判断链表是否为空,如果为空,则将元素插入到头结点后,然后将其指针指向自身;如果不为空,根据插入的位置作出相应操作。

文档评论(0)

balala11 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档