一、数组的逻辑结构
数组作为一种数据结构其特点是结构中的元素本身可以是具有某种结构的数据,但属于同一数据类型。
比如:一维数组可以看作一个线性表;
二维数组可以看作“数据元素是一维数组”的一维数组;
等价于
三维数组可以看作“数据元素是二维数组”的一维数组;
等价于
依次类推到N维数组。
二、多维数组在内存中的存储结构
通常,数组在内存被映象为向量,即用向量作为数组的一种存储结构,这是因为内存的地址空间是一维的,数组的行列固定后,通过一个映象函数,则可根据数组元素的下标得到它的存储地址。
对于一维数组按下标顺序分配即可。
对多维数组分配时,要把它的元素映象存储在一维存储器中,一般有两种存储方式:
一是以行为主序(或先行后列)的顺序存放,如BASIC、PASCAL、COBOL、C 等程序设计语言中用的是以行为主的顺序分配,即一行分配完了接着分配下一行;另一种是以列为主序(先列后行)的顺序存放,如FORTRAN 语言中,用的是以列为主序的分配顺序,即一列一列地分配。
例如一个2×3二维数组(2:第一维Y;3:第二维X)array[2][3],逻辑结构可以用图5.2 表示。以行为主序的内存存储如图5.3(a)所示。分配顺序为:a11 ,a12 ,a13 ,a21 ,a22 ,a23 ; 以列为主序的分配顺序为:a11 ,a21 ,a12 ,a22 ,a13 ,a23 ; 它的内存存储如图5.3(b)所示。
二维数组下标到内存地址的映射函数为:Address = F(i,j) = i*rows + j;
例如一个k×m×n三维数组(k:第一维Z;m:第二维Y;n:第三维X)array[k][m][n],逻辑结构如下左图所示。以行为主序的内存存储如下右图所示。
三维数组下标到内存地址的映射函数为:Address = F(k,i,j) = k*(cols*rows) + i*rows + j;
若是一个s×k×m×n四维数组(s:第一维T;k:第二维Z;m:第三维Y;n:第四维X)array[s][k][m][n],它的逻辑结构、内存存储、下标到内存地址的映射函数,方法同上,依次类推。
其他的N维数组类似。
(完)