专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

1. 数组:为什么数组要从0开始编号,而不是1开始呢?

100_1.png

本文共864字|阅读2分钟

在大部分编程语言中,数组都是从0开始编号的,但你是否下意识想过,为什么数组要从0开始编号,而不是1开始呢? 从1开始不是更符合人类的思维习惯吗?下面以这个问题来学习数组。

如何实现随机访问?

什么是数组?估计你心中已经有了答案。不过,这里还是总结一下。数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 这里定义里有几个关键词,理解了这几个关键词,就能彻底掌握数组的概念了。

线性表(Linear List)。顾名思义,线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。除了数组,链表、队列、栈等也是线性表结构。 100_2.png

而与它相对立的概念是非线性表,比如二叉树、堆、图等。之所以叫非线性,是因为在非线性表中,数据之间并不是简单的前后关系。 100_3.png

数组时间复杂度

数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 注意点:

1、 数组是一种线性表;
2、 连续的内存空间和相同类型的数据。 由于第二个性质,数组支持 “随机访问”,根据下标随机访问时间复杂度为 O(1),但是在数组中删除、插入数据时需要做数据搬移工作。

低效的“插入”和“删除”操作

1、 插入操作

假如数组的长度为 n,我们需要将一个数据插入到数据的第 k 个位置,则需要将 [k , n] 位元素都顺序地往后挪动一位。

  • 最好的情况:时间复杂度为 O(1),此时在数组末尾插入元素。
  • 最坏的情况:时间复杂度为 O(n),此时在数组开头插入元素。
  • 平均的情况:时间复杂度为 O(n),因为在每个位置插入元素的概率相同,故 (1+2+3+......+n)/ n = O(n)

2、 删除操作

和插入操作一样,为了保证内存的连续性,删除操作也需要搬移数据。

  • 最好的情况:时间复杂度为O(1),此时删除数组末尾的元素。
  • 最坏的情况:时间复杂度为O(n),此时删除数组开头的元素。
  • 平均的情况:时间复杂度为O(n),因为删除每个位置的元素的概率相同,故(1+2+3+……+n)/ n = O(n)。

3、 警惕数组访问越界

在 C 语言中,只要不是访问受限的内存,所有的内存空间都是可以自由访问的。如果疏忽会造成严重的后果。当然,Java语言会自动检测。

100_4.png

部分图片来源于网络,版权归原作者,侵删。

文章永久链接:https://tech.souyunku.com/33873

未经允许不得转载:搜云库技术团队 » 1. 数组:为什么数组要从0开始编号,而不是1开始呢?

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们