什么是数据结构

在计算机中,数据存储于内存之中,而决定了数据在内存中存放的顺序以及位置关系的就是数据结构。可以将他看作是一种对数据的存放的一种规定。

什么是列表

链表同数组一样,也是最基础的数据结构之一,数据也是以线性结构存放在内存中。
image.png
如上图所示,Blue、Yellow、Red可以看作三个节点,每个节点中都有数据域,也就是存放Blue、Yellow、Red的地方,每个节点中又有一个指针,即指针域,指针域中存放了指向下一个数据的内存地址,就像锁链一样将数据连接起来了。其中Red后面没有数据了,所以它的指针域不指向任何位置,也就是Null。
image.png
与数组不同的是,在链表中,数据一般都是分散存储在内存中的,也就是说它们在内存中的位置并不是连续的。

读取数据

由于数据是分散存储的,所以想要访问数据,只能从第一个数据开始,顺着指针的指向顺序向下访问,即顺序访问。比如,想要找到Red这个数据,就得从Blue开始访问,然后访问Yellow,然后才能找到Red。
image.png

添加数据

相对于数组,链表的添加就比较简单,只需要修改添加位置前后的指针的指向就可以了,比如在Blue和Yellow之间添加Green、

  • 将Blue的指针指向变为Green,然后再把Green的指针指向Yellow,数据添加就完成了。
    image.png

删除数据

同添加一样,只需要改变指针的指向就可以了,比如删除Yellow

  • 将Green的指针指向从Yellow变为Red,删除的操作就完成了。
    image.png

链表扩展

虽然上文中提到的链表在尾部没有指针,但我们也可以在链表尾部使用指针,并且让它指向链表头部的数据,将链表变成环形,这便是循环链表,也叫环形链表。循环链表没有头和尾的概念,想要保存数量固定的最新数据时通常会使用这种链表。
image.png

另外,以上提到的链表里的每个数据都只有一个指针,但我们可以把指针设定为两个,并且让它们分别指向前后数据,这就是双向链表。使用这种链表,不仅可以从前往后,还可以从后往前遍历数据,十分方便。也是树的基础。
image.png

总结

链表的数据是分散存储在内存中的,他们之间用指针指向关联成一个线性结构。在查询数据时,我们需要从链表头部开始查找(线性查找),如果目标数据在链表最后,需要的时间就是O(n)。
添加和删除数据时,只需要修改指针的指向,所以需要的时间为O(1).

参考:武培轩:什么是链表https://www.cnblogs.com/wupeixuan/p/12285989.html