前言
数组指多个连续的最小存储单元所构成的集合,且每个单元只可被一个数组使用。数组会记录起始最小存储单元的下标(start)与数组长度(len)。(在计算机系统中,可以把内存看做一个超大的数组)
原理
实际上数组是由,最小存储单元这个概念规定自然产生的一种数据结构,即多个连续的最小存储单元称之为数组。实际上整个存储区域也可以视为是一个数组。
数据基本操作
增
例:
如上图,当对数组q增加时,因为后面存储单元已被w占用,无法在链接新的元素,只能在其他空闲位置重新开辟(如图中e就是q重新开辟后的位置)。
性能:
重新开辟存储区域大小为N,所以开销为O(N)。
删
例:
(图一)
(图二)
如上图一数组q删除了存储区域(3,4,5,6,7)虽然不会出现占用的情况,但如果不进行重新分配,会出现q占用的存储区域很大,实际利用的区域非常小,造成大量存储资源浪费。
如上图二数组删除后重新开辟了大小合适的数组,在申请新数组w时,可以充分利用空间。
性能:
需要重新开辟存储区域大小为N,所以开销为O(N)。
查
例:
如上图访问q中的第3个元素下标为3+3-1 =6(数组的第1个元素为start,所以需要减1),因为数组的特性它是由均匀且连续的元素构成,且会记录第一个开始的元素下标为start,那么访问这个数组中的第N个元素,可快速计算得到这个元素的下标为start+N-1,所以消耗为O(1)。
改
改变一个元素时需要先查询,修改的成本为O(1)+O(查) ,所以修改一个元素的开销和查找性能相当,所以消耗为O(1)。
后语
1.数组作为计算机中最基本的数据结构之一,可以看到数组的优势很明显劣势也很明显,即查询消耗非常小,增删都需要重新申请数组开销非常大。
2.数组在增删的时候,需要重新申请数组,其核心原因是因为存储空间并不是无限的。在考虑到存储利用率的情况下做出的妥协。
3.在实际中,数组的申请和删除并不是马上重新申请新的存储地址,是有一套处理逻辑,这里简化了这个过程,不做过多的说明。
4.数组实际上已经是最基础的数据结构了,数据结构从某种意义上来讲,可以理解为数据之间的关系。而物理现实等原因,导致了需要定义最小存储块,那么就自然诞生了数组这种数据结构。