跳转至

# 4.4. 小结

- 数组和链表是两种基本数据结构，分别代表数据在计算机内存中的连续空间存储和离散空间存储方式。两者的优缺点呈现出互补的特性。
- 数组支持随机访问、占用内存较少；但插入和删除元素效率低，且初始化后长度不可变。
- 链表通过更改指针实现高效的节点插入与删除，且可以灵活调整长度；但节点访问效率低、占用内存较多。常见的链表类型包括单向链表、循环链表、双向链表。
- 动态数组，又称列表，是基于数组实现的一种数据结构。它保留了数组的优势，同时可以灵活调整长度。列表的出现极大地提高了数组的易用性，但可能导致部分内存空间浪费。
- 下表总结并对比了数组与链表的各项特性。

| 数组 | 链表
--- | --- | ---
存储方式 | 连续内存空间 | 离散内存空间
数据结构长度 | 长度不可变 | 长度可变
内存使用率 | 占用内存少、缓存局部性好 | 占用内存多
优势操作 | 随机访问 | 插入、删除

缓存局部性

在计算机中，数据读写速度排序是“硬盘 < 内存 < CPU 缓存”。当我们访问数组元素时，计算机不仅会加载它，还会缓存其周围的其他数据，从而借助高速缓存来提升后续操作的执行速度。链表则不然，计算机只能挨个地缓存各个节点，这样的多次“搬运”降低了整体效率。

- 下表对比了数组与链表在各种操作上的效率。

操作 | 数组 | 链表
--- | --- | ---
访问元素 | \(O(1)\) | \(O(N)\)
添加元素 | \(O(N)\) | \(O(1)\)
删除元素 | \(O(N)\) | \(O(1)\)

## 评论