数组

116 阅读2分钟

数组

数组是一种定长的存储相同数据类型的数据结构,存储的数组在一段连续的空间里。为最简单的数据结构之一。

image.png

数组的内存分配

由于数组是将其所有的数据元素存储在连续的内存空间中。在存储数组时,仅存储数组的基地址,即第一个元素的地址。数组其它元素的地址可以通过对基地址的偏移来计算。

数组的内存分配

找到首位的地址,根据每个元素的大小求偏移量。

时间复杂度

访问

数组可以直接使用索引访问,因此,访问数组元素的时间复杂度为O(1)

查找

从数组中查找一个给定的值,需要遍历数组中的每一个元素,知道找到给定值为止。假设查找的形式为线性查找(数组最基本的查找形式),则查找的时间复杂度为O(n).

也存在一些其它的查找算法,比如,二分搜索,可在O(log n)的时间复杂度内搜索,但前提是当前数组为有序数组。

插入

在数组的两个元素之间插入一个新的元素,需要将插入之后的所有位置的元素向后移动。这就意味着如果在数组的开头插入元素,需要将数组的所有元素向后移动,因此插入操作的时间复杂度为O(n)

删除

在数组的两个元素之间删除一个元素,需要将删除位置之后的所有位置的元素向前移动。这就意味着,如果删除数组的第一个元素,需要将数组的所有元素统一向前移动,因此删除操作的时间复杂度为O(n)

空间要求

数组仅占据用于存储指定数据类型的元素的空间,这就意味着,存储n个元素所要求的空间复杂度为O(n)

数组的优点

相比其它类型的数据结构,数组有以下优点:

  • 数组允许随机访问数组元素,每个存储在数组中的元素可以通过直接访问其索引来使用
  • 数组对存储友好。这意味着在某些情况下,由于数组的线性存储方式,代码的执行顺序会大大提高

数组的缺点

  • 声明数组时,需要指定数组的长度。初始声明数组的长度过长或过短,在移动数组元素时都会有导致效率变低
  • 插入和删除元素之后保持数组的连续性代价是昂贵的,因为有可能需要重新排列所有数组元素。