链表是数据结构之一,其中的数据呈线性排列,物理存储结构上非连续 、非顺序的存储结构,数据元素的 逻辑顺序 是通过链表中的 指针链 接 次序实现的。
在链表中,数据添加和删除都比较方便,就是访问的比较耗费时间。
在上图就是链表的概念图,蓝色,黄色,红色这3个字符串存储在链表中。每一个数据都有一个指针,它指向下一个数据内存地址。
链表顺序访问概念图。
在链表中,因为数据是非连续性,非顺序性的 所以数据都是分散存储的,所有如果想要访问数据,只能从第一个数据开始,顺着指针的指向一一往下访问(这就是所谓的顺序访问),在链表顺序访问概念图中,比如,想要着到红这一个数据,就得从蓝开始访问。在这之后经过黄才能找到我们需要的红。
链表添加数据概念图。
如果我们想在链表中添加数据,只需要改变添加位置前后的指针指向就可以了。例如,在蓝 跟黄之间添加绿。
链表删除数据概念图。
OK,假如我们现在要把黄删除掉,操作跟添加数据一样,只需要改变指针的指向就可以完成操作。
这个时候,只需要把绿色指针指向的位置从黄变为红,删除就完成了,虽然黄的数据本身还存储在内存中,但是不管哪里都无法访问这个数据,所以也就没有特意去删除它的必要了,以后要用到黄所在的存储空间,只要用新的数据覆盖即可。
对链表的操作需要运行的时间,在这里我们把链表的数据集成N的话,访问数据时,我们需要从链表头部开始查询(线性查找)如果目标数据在链表的最后,需要时间就是O(n)。
另外添加数据只要更改两个指针的指向,所以耗费的时间与N无关如果已经达到了添加数据的位置,那么添加的操作时间花费0(1)的时间,删除数据同样也需要0(1)的时间。
扩展链表:
1:我们也可以在 链表尾部使用指针,并且让他指向链表头部,将链表变成环形,我们可以叫它循坏链表,也可以叫它环形链表。
2:我们还可以把指针设定两个并且让它们分别指向前后数据。这就是双向链表.使用这种链表,不仅可以从前往后,还可以从后往前遍历。双向链表存在两个缺点,一是指针数的增加会导致存储空间需求增加。二是添加和删除数据时需要改变更多的指针指向。
在此链表概念图解到此,在下一篇文章我们来学习如果来实现一个单链表,双链表。