5 线性表(三)

线性表(三)

3.13 循环链表

对于单链表,由于每个节点只存储了向后的指针,到了尾标志就停止了向后链的操作,这样,当中某一节点就无法找到它的前驱结点了。

将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循环链表

为了使空链表与非空链表处理一致,我们通常设一个头结点。

循环链表带有头结点的空链表如图:

其实循环链表和单链表的主要差异就在于循环的判断条件上,原来是判断p->next是否为空,现在则是p->next不等于头结点,则循环为结束。

3.14 双向链表

我们在单链表中,有了next指针,这就使得我们要查找下一结点的时间复杂度为O(1),可是如果我们要查找的是上一结点的话,那最坏的时间复杂度就是O(n)了,因为我们每次都要从头开始遍历查找。

双向链表是在单链表的每个结点中,再设置一个指向其前驱结点的指针域。所以在双向链表中的结点都有两个指针域,一个指向直接后继,另一个指向直接前驱。

![](http://upload-images.jianshu.io/upload_images/3532835-951430acfd2ec293.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

简单总结一下,双向链表相对于单链表来说,要更复杂一些,毕竟他多了prior指针,对于插入和删除时,需要格外小心。

另外它由于每个节点都需要记录两份指针,所以在空间上是要占用略多一点,不过,由于它良好的对称性,使得对某个节点的前后节点的下操作,带来了方便,可以有效地提高算法的时间性能。说白了,就是用空间来换时间

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.线性表的定义 线性表:零个或多个数据元素的有限序列序列:也就是说元素之间是有顺序的,若元素存在多个,则第一个元...
    e40c669177be阅读 2,086评论 6 15
  • 本文内容取自于小甲鱼的数据结构与算法。http://www.jianshu.com/p/230e6fde9c75 ...
    阿阿阿阿毛阅读 2,921评论 0 7
  • 大学的时候不好好学习,老师在讲台上讲课,自己在以为老师看不到的座位看小说,现在用到了老师讲的知识,只能自己看书查资...
    和珏猫阅读 1,475评论 1 3
  • 在上一篇文章中我们简单说了数据结构的概念和数据结构与算法的一些关系,这一篇文章的内容是关于线性表的东西,主要有线性...
    硅谷小虾米阅读 1,297评论 1 3
  • 一.线性表 定义:零个或者多个元素的有限序列。也就是说它得满足以下几个条件:  ①该序列的数据元素是有限的。  ②...
    Geeks_Liu阅读 2,710评论 1 12