在上一篇文章中,写到了顺序表。我们知道顺序表和链表都属于线性表。既然都是存储数据,干啊费那么大劲整这么多,所以它们俩肯定有各自的优点和缺点。
|
优点 |
缺点 |
顺序表 |
1.支持随机访问 | 1.增容时成倍增长,有空间浪费 2.中间或者头部插入数据时效率不高 O(N) |
链表 | 1.用多少开多少,直接链上去,没有空间浪费 2.头尾插入效率高 O(1) |
1.不支持随机访问 |
链表的概念
链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。如下图所示,在数据结构中,a1里面的指针存储着a2的地址,这样一个链接一个,就形成了链表。
链表的种类
在实际中,链表有许多形式,不止是上图中简简单单的样子。以下情况组合起来就有八种形式的链表:
下面介绍一下它们各自的结构,通过图可以理解得更深刻
不带头单链表
- 单向、双向
- 带头、不带头
- 循环、非循环
不带头双向链表
带头单链表
循环单链表
带头双向循环链表
虽然有很多的链表结构,但其实,我们最常用的就是两种结构:
- 无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈希桶、图的邻接表等等。另外这种结构在笔试面试中出现很多。
- 带头双向循环链表:结构最复杂,一股用在单独存储数据。 实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而简单了,后面我们代码实现了就知道了。