数据结构也有趣 - 从此喜欢使用数组

由一个问题开始

问题: 有没有想过, 为什么数组的下标索引是在0开始, 而不是符合习惯思维的1呢?

几乎我们接触的每一门编程语言都有数组这种数据结构, 写代码的时候, 语法这样要求我们:必须给定数组元素的数据类型, 必须给定数组长度, 访问数组元素的时候下标必须在0开始(大部分编程语言), 下标索引不可以越界. 为什么要给我这种反人类的约束! 小马哥不喜欢受约束, 但是研究了数组中隐藏的数据结构原理之后, 会发现, 这一切约束都是值得和美妙的.

首先, 数组是什么? 其次, 计算机是如何找到数组中元素的? 数组是一种线性表结构, 使用一块连续的内存, 存储一组相同类型的数据. 带来两个问题.

  • 问题1: 为什么需要连续的内存?
  • 问题2: 为什么这组数据要具备相同的类型

这些统统是为了快速的访问数据而考虑的, CPU通过一个公式计算地址, 访问数组的元素, 公式如下:

  • array[ i ] = base_address + i * data_type_size

相同的数据类型, 比如都是int类型, 那么每一个元素都是占用4个字节;

连续的内存,将所有元素放在一起, 才会让cpu通过公式推理计算得到每一个元素的存储位置. 

这两个问题的答案让数组能以O(1)的时间复杂度被访问, 所以带来如下两个数组的性能特点:

特点1: 访问性能高效, 时间复杂度为O(1)

特点2: 插入删除相对低效, 时间复杂度为O(n)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

能力工场小马哥

如果对您有帮助, 请打赏支持~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值