前面介绍的线性表、栈、队列和串都属于线性结构,本章的数组和下一章的广义表并不属于线性结构,但可以看作是线性结构的推广。数组中的元素可以具有某种元素,并且元素的结构相同。数组中的数据元素可以上单个元素,也可以是一个线性表。

数组的定义及表示

【定义】
数组(array)是由类型相同的数据元素构成的有序集合,每个元素称为一个数组元素,数组中的元素依次存储在n个连续内存单元中。数组中的元素本身可以是单个不可分的基本数据类型,也可以是可继续再分的向量或其他结构,但这些元素都属于同一种类型,因此数组可看做是一般线性表的推广。例如,一维数组可看成线性表,二维数组可看成“数据元素为一维数组(线性表)”的线性表。
一维数组。如果每个数组元素qi表示一个行向量qi=(ai,0  ai,1  ...  ai,n-1),则A就是一个二维数组。

如图所示

数组 filter jquery 数组词一年级_数据结构与算法

如果每个元素qj是一个列向量qj=(a0,j  a1,j  ...  am-1,j),则A也是一个二维数组,列向量和二维数组的关系

如图
 

数组 filter jquery 数组词一年级_数据结构与算法_02

因此二维数组可以看做是线性表的线性表。同理,一个n维的数组也可以看成一个线性表,其中线性表中的每一个数据元素是n-1维的数组。

【顺序存储】

对于一个数组,一旦确定了维数和各维的长度,则该数组元素的个数就是确定的,一般不进行插入和删除操作,不涉及元素的移动操作。

数组是多维的结构,而计算机的存储器是一维(线性)结构。如果要将一个多维的结构存放在一个一维的存储单元里,这就需要先将多维数组转换成一维的线性序列,才能将其存放在存储器中。

数组的存储方式有两种:一种是以行序为主序的存储方式,另一种是以列序为主序的存储方式。则二维数组A以行序为主序的存储顺序为:

a0,0 a0,1  ... a0,n-1 a1,1  ... a1,n-1 ... am-1,0 am-1,2 ... am-1,n-1

以列序为主序的存储顺序为:

a0,0 a1,0 ... am-1,0 a0,1 a1,1 ... am-1,1 ... ao,n-1 a1,n-1 ... am-1,n-1

根据数组中元素的连续存放特性,只要给定数组的下标(起始地址),很容易得到任何一个元素的位置。设每个元素占d个存储单元,则二维数组A中的任何一个元素aij的存储位置可以由以下公式确定。

Loc(i,j)=Loc(0,0)+(i×n+j)×d

Loc(i,j)为元素aij的存储地址,Loc(0,0)表示元素a00的存储地址,即二维数组的起始地址,也叫基地址。

推广到更为一般的情况,可以得到n维数组中数据元素存储地址与数据下标之间的关系:

Loc(j1,j2,...,jn)=Loc(0,0,..., 0)+(b1*b2*...*bn-1*j0+b2*b3*...*bn-1*j1+...+bn-1*jn-2+jn-1)*d,其中bi是第i维的长度,ji是数组的第i维下标。