严蔚敏《数据结构》(C语言版)【教材精讲+考研真题解析】讲义与视频课程【36小时高清视频】
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

5.2 数组的顺序表示和实现

视频二维码(扫码观看)

数组一般不做插入和删除操作,也就是说,数组一旦建立,结构中的元素个数和元素间的关系就不再发生变化。因此,一般都是采用顺序存储的方法来表示数组。

问题:计算机的内存结构是一维(线性)地址结构,对于多维数组,将其存放(映射)到内存时,有个次序约定问题。即必须按某种次序将数组元素排成一维序列,然后将这个线性序列存放到内存中。

二维数组是最简单的多维数组,以二维数组为例说明多维数组存放(映射)到内存一维结构时的次序约定问题。

设有二维数组A=(aijm×n,如图5-1所示,若每个元素占用的存储单元数为L(个),LOC(i,j)表示元素aij的存储位置。a00是二维数组A的基地址。

图5-1 二维数组的表示形式

图5-2 二维数组顺序存储图例形式

图5-2所示,两种顺序存储方式:

行优先顺序

将数组元素按行排列,第i+1个行向量紧接在第i个行向量后面。对二维数组,按行优先顺序存储的线性序列为:

a00,a01,…,a0n1,a10,a11,…,a1n1,…,am10,am11,…,am1n1

PASCAL、C是按行优先顺序存储的。

列优先顺序

将数组元素按列向量排列,第j+1个列向量紧接在第j个列向量之后,对二维数组,按列优先顺序存储的线性序列为:

a00,a10,…,am10,a01,a11,…,am11,…,an10,an11,…,an1m1

FORTRAN是按列优先顺序存储的。

n维数组的数据元素存储位置的计算公式(n维数组的印象函数)为

其中,cn=L,ci1=bi×ci,1<i≤n。