抽象源头
从计算机内存这个层次来看,用户申请的内存空间只有两种划分规则:连续和非连续,这恰恰对应了数组和链表的内存申请特性,这不是一种巧合,事实是数组和链表是计算机内存最基本的抽象。
其他的数据结构,可以说都是对数组和链表的进一步抽象,都可以使用数组和链表来实现。
优缺点比较
数组的优点即为链表的缺点,链表的优点即为数组的缺点。
| 优点 | 缺点 | |
|---|---|---|
| 数组 | 随机访问 | 空间固定,需要手动扩容 |
| 链表 | 天然支持自动扩容 | 不支持随机访问 |
很多高级数据结构,会同时使用数组和链表,充分发挥各自的优点,规避各自的缺点
算法比较
| 查找 | 插入 | 删除 | 随机访问 | |
|---|---|---|---|---|
| 数组 | O(n) | O(n) | O(n) | O(1) |
| 链表 | O(n) | O(1) | O(1) | 不支持 |