文章目录
1 前言
前面文章描述了顺序表、单链表、双向链表、循环链表、静态链表等几类线性表的含义、特点、适用场景、基本操作以及C语言的实现过程。通过对比分析,这几种线性表,都具有固有的特点、优缺点,也就决定了其适用于不同的应用场景;同时一部分线性表也具有综合性特点,使得其能够应用于更广场景。各类线性表最具代表性的特点归纳为:
- 顺序表,高效的查找操作
- 单链表,高效的插入/删除操作
- 双向链表,双向遍历,遍历效率高
- 循环链表,任一节点开始,可以遍历整个链表,遍历灵活性高
- 静态链表,综合了顺序表和链表特点,既有高效的查找操作,又能快速增删元素节点
以下,我们把几种线性表的特点和适用场景(参考)罗列为一个表格,以方便对比。更详细的描述,参考本文末尾的相关文章链接。
2 线性表特点比较
存储地址 | 存储空间 | 存储密度 | 存取结构 | 空间长度 | 查找 | 删除/插入 | |
---|---|---|---|---|---|---|---|
顺序表 | 连续 | 静态 | =1 | 顺序/随机 | 定长 | O(1) | O(n) |
单链表 | 非连续 | 动态 | <1 | 顺序 | 动态增加 | O(n) | O(1) |
双向链表 | 非连续 | 动态 | <1 | 顺序 | 动态增加 | O(n) | O(1) |
循环链表 | 非连续 | 动态 | <1 | 顺序 | 动态增加 | O(n) | O(1) |
静态链表 | 非连续 | 静态 | <1 | 顺序 | 定长 | O(1) | O(1) |
3 线性表适用场景参考
应用场景 | 线性表选择 |
---|---|
固定表长度 | 顺序表/静态链表 |
频繁查找操作 | 顺序表/静态链表 |
频繁插入/删除操作 | 链表 |
复用缓冲队列 | 循环链表 |
双向遍历 | 双向链表 |
兼顾查找/插入/删除效率 | 静态链表 |
约瑟夫环问题 | 循环链表 |
LRU 缓存淘汰算法 | 循环链表 |