数组
数组把相同类型的元素按顺序放在一块连续内存里。你可以用下标 在 时间内访问第 个元素——这是它最重要的能力。
多维数组(如矩阵)可看成「数组的数组」,逻辑上按行/列组织,物理上仍常映射到一维连续空间。
本文解决什么问题
- 随机访问为何是
- 插入删除代价从何而来
- 定长数组与
std::vector如何对照 - 和 顺序表 的关系
特点
| 操作 | 平均时间 | 说明 |
|---|---|---|
| 按下标读写 | 随机访问 | |
| 末尾追加(容量足够) | 动态数组均摊常为 | |
| 中间插入 / 删除 | 要搬移后面的元素 | |
| 按值查找(无序) | 一般要扫一遍 |
优点:访问快、缓存友好、实现简单。
缺点:中间改动贵;定长数组大小不灵活;动态扩容会有拷贝成本。
随机 访问的本质
若元素类型大小为 字节,首地址为 ,则下标 的地址为:
CPU 一次加法即可定位,因此是 。链表做不到这一点,因为结点地址不连续。