数组
数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。
缺点:插入删除复杂,必须要连续空间
优点:随机访问高效,可以利用CPU 的缓存机制
几个关键词
线性表:
数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。
image.png
非线性表:
非线性表中,数据之间并不是简单的前后关系。
image.png
连续的内存空间和相同类型:
- 可以实现随机访问
- 删除,插入低效
- 必须是连续的内存
随机存取:
指的是当存储器中的消息被读取或写入时,所需要的时间与这段信息所在的位置无关。相对的,读取或写入顺序访问(SequentialAccess)存储设备中的信息时,其所需要的时间与位置就会有关系(如磁带)。
数据实现随机访问示例:
image.png
扩展:为什么大多数编程语言中,数组要从 0 开始编号,而不是从 1开始呢?
从数组存储的内存模型上来看,“下标”最确切的定义应该是“偏移(offset)”。前面也讲到,如果用 a 来表示数组的首地址,a[k] 就表示偏移 k 个 type_size 的位置,所以计算 a[k] 的内存地址只需要用这个公式:
a[k]_address = base_address + k * type_size
但是如果偏移从1开始
a[k]_address = base_address + (k-1)*type_size
历史原因:
C 语言设计者用 0 开始计数数组下标,之后的 Java、JavaScript 等高级语言都效仿了 C 语言,或者说,为了在一定程度上减少 C 语言程序员学习 Java 的学习成本,因此继续沿用了从 0 开始计数的习惯。实际上,很多语言中数组也并不是从 0 开始计数的,比如 Matlab。甚至还有一些语言支持负数下标,比如 Python。
引用:
https://baike.baidu.com/item/%E9%9A%8F%E6%9C%BA%E5%AD%98%E5%8F%96
网友评论