链表《概念》

111 阅读3分钟

链表是数据结构之一,其中的数据呈线性排列,物理存储结构上非连续 、非顺序的存储结构,数据元素的 逻辑顺序 是通过链表中的 指针链 接 次序实现的。

在链表中,数据添加和删除都比较方便,就是访问的比较耗费时间。

image.png

在上图就是链表的概念图,蓝色,黄色,红色这3个字符串存储在链表中。每一个数据都有一个指针,它指向下一个数据内存地址。

image.png

链表顺序访问概念图。

image.png

在链表中,因为数据是非连续性,非顺序性的 所以数据都是分散存储的,所有如果想要访问数据,只能从第一个数据开始,顺着指针的指向一一往下访问(这就是所谓的顺序访问),在链表顺序访问概念图中,比如,想要着到红这一个数据,就得从蓝开始访问。在这之后经过黄才能找到我们需要的红。

链表添加数据概念图。

image.png

如果我们想在链表中添加数据,只需要改变添加位置前后的指针指向就可以了。例如,在蓝 跟黄之间添加绿。

image.png

链表删除数据概念图。

image.png

OK,假如我们现在要把黄删除掉,操作跟添加数据一样,只需要改变指针的指向就可以完成操作。

image.png

这个时候,只需要把绿色指针指向的位置从黄变为红,删除就完成了,虽然黄的数据本身还存储在内存中,但是不管哪里都无法访问这个数据,所以也就没有特意去删除它的必要了,以后要用到黄所在的存储空间,只要用新的数据覆盖即可。

对链表的操作需要运行的时间,在这里我们把链表的数据集成N的话,访问数据时,我们需要从链表头部开始查询(线性查找)如果目标数据在链表的最后,需要时间就是O(n)。

另外添加数据只要更改两个指针的指向,所以耗费的时间与N无关如果已经达到了添加数据的位置,那么添加的操作时间花费0(1)的时间,删除数据同样也需要0(1)的时间。

扩展链表:

1:我们也可以在 链表尾部使用指针,并且让他指向链表头部,将链表变成环形,我们可以叫它循坏链表,也可以叫它环形链表。

image.png

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

image.png

在此链表概念图解到此,在下一篇文章我们来学习如果来实现一个单链表,双链表。