数组

数组

数组(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

极客时间: https://time.geekbang.org/column/article/41149

你可能感兴趣的:(数组)