数据结构之数组

本文深入探讨了数组这一数据结构的本质定义、内存结构及其优势与劣势。数组作为相同元素的序列,其连续的内存分配使其在按索引访问时表现出O(1)的时间复杂度,但在元素的增删操作上效率较低。文章还解析了数组为何通常从0开始计数,以及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据结构之数组

在这里插入图片描述

思考:

  • 1.数组的本质定义?
  • 2.数组的内存结构?
  • 3.数组的优势和劣势?
  • 4.数组为什么大部分都行0开始?
  • 5.数组能否用其他容器来代替?
  • 6.数组的应用场景?

一、数组的本质定义:
数组:是相同元素的序列。即把相同类型的若干元素按无序的形式组织起来的一种形式。(核心思想:就是对角标的操作)
二、数组的内存结构:

  • 数组是一种线性结构,即只有前置节点和后续节点的数据结构。
    像队列,链表栈都是线性结构的,而二叉树、图是非线性结构的
  • 数组元素在内存分配上是连续的(“数组的杀手锏”,需记死烂在心里)。

三、数组的优势和劣势:
问题1.:为什么数据可以使用下标访问?
答案:内存连续+相同数据类型

问题2:数组适合按下标来查找元素。按下标查找元素的时间复杂度是o(1).为什么呢?
答案:
数据在内存上分配的情景:
要想访问数组的元素需要知道元素在内存中对应的内存地址。而数组指向的内存的地址为首元素的地址,即arr[0]。由于数组的每个元素都是相同类型的,每个类型占用的字节数系统已知,所以想访问一个数组元素,按照下标查找可以抽象为:arr[n]=arr[0]+size*n, size为每个元素的大小(int类型的,size=4),n是一个里首元素的偏移量,arr[0]:基地址。
优势:数组按下标查询速度很快。由于数组的连续性,所以在遍历的时候很快,不仅是数组的连续性起作用,cpu的缓存也起作用了,因为cpu读缓存只能读取连续的内容,数组的连续性刚好符合cpu缓存的指令原理。【注:cpu缓存的速度内存的速度快上很多】

劣势:

  • 1.数组的添加和删除速度慢。由于数组在内存排列上是连续的,而且要保持这种连续性,所以当增加一个元素或者删除一个元素,为了保持连续性,需要做大量元素的移动工作。
  • 2.数组的连续性要求创建数组的时候,内存必须有相应大小的连续区块,如果不存在,可能创建失败。
  • 3.数组要求所有元素是同一个类型。
  • 4.数组是固定长度的数据结构
  • 5.数据有访问越界的可能。

四、数组下标为什么从0开始:
1.如果数组下标从1开始,上面的公式变为:arr[n]=arr[1]+size*(n-1),那么每次获取内存地址都多了一次减法运算,即多了一次cpu指令的运行。
2.编程语言的鼻祖c语言是从0开始的,java是后来衍生的语言,沿用了这个传统。

五、数组的应用场景:
以后接触了再补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值