数组

作者: jiaji_3740 | 来源:发表于2019-04-17 14:26 被阅读0次

    数组

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

    相关文章

      网友评论

          本文标题:数组

          本文链接:https://www.haomeiwen.com/subject/spmvwqtx.html