链表数据结构

链表的定义

链表是数据结构之一,其中的数据呈线性排列。在链表中,数据的添加和删除都较为方便,就是访问比较耗费时间。

  • 这就是链表的概念图。Blue、Yellow、Red 这 3 个字符串作为数据被存储于链表中。每个数据都有 1 个“指针”,它指向下一个数据的内存地址。


    image.png
  • 在链表中,数据一般都是分散存储于内存中的,无须存储在连续空间内。


    image.png
  • 因为数据都是分散存储的,所以如果想要访问数据,只能从第 1个数据开始,顺着指针的指向一一往下访问(这便是顺序访问)。比如,想要找到 Red这一数据,就得从 Blue开始访问。


    image.png
  • 这之后,还要经过 Yellow,我们才能找到 Red。


    image.png
  • 如果想要添加数据,只需要改变添加位置前后的指针指向就可以,非常简单。比如,在 Blue和 Yellow 之间添加 Green。


    image.png
  • 将 Blue的指针指向的位置变成 Green,然后再把 Green的指针指向 Yellow,数据的添加就大功告成了


    image.png
  • 数据的删除也一样,只要改变指针的指向就可以,比如删除 Yellow。


    image.png
  • 只需要把 Green指针指向的位置从 Yellow变成 Red,删除就完成了。


    image.png

对链表的操作所需的运行时间到底是多少呢?在这里,我们把链表中的数据量记成n。访问数据时,我们需要从链表头部开始查找(线性查找),如果目标数据在链表最后的话,需要的时间就是 O(n)。
另外,添加数据只需要更改两个指针的指向,所以耗费的时间与 n 无关。如果已经到达了添加数据的位置,那么添加操作只需花费 O(1) 的时间。删除数据同样也只需O(1) 的时间。

链表的分类

  • 循环链表,也叫环形链表。


    image.png

我们也可以在链表尾部使用指针,并且让它指向链表头部的数据,将链表变成环形。

  • 双向链表


    image.png

上文链表里的每个数据都只有一个指针,但我们可以把指针设定为两个,并且让它们分别指向前后数据,这就是“双向链表”。使用这种链表,不仅可以从前往后,还可以从后往前遍历数据,十分方便。
但是,双向链表存在两个缺点:一是指针数的增加会导致存储空间需求增加;二是添加和删除数据时需要改变更多指针的指向。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 什么是链表数据结构? 链表是线性表的一种,但是在存储上和线性表结构的数组有很大的差异,数组的存储在内存上是一块连续...
    叫我不矜持阅读 4,921评论 0 7
  • 一、链表的定义 1、定义 (1)n个结点离散分配(2)彼此通过指针相连(3)每个结点只有1个前驱结点,每个结点只有...
    3e1094b2ef7b阅读 3,935评论 0 1
  • 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列...
    大雄記阅读 7,178评论 0 12
  • 德国拥有丰富多样的自然风光,从奇异的岩层,绝妙的湖景山色,到幽静的森林,无不让游客感叹大自然的神奇。今天就和明好一...
    小语种大学问阅读 4,801评论 0 0
  • 截止到昨天,我用财富自由之路的“事件志”本记录每天完成事件清单刚好50天了,昨天也是我用百词斩刷单词的第666天。...
    hhzha0阅读 2,958评论 1 1

友情链接更多精彩内容