通常有两种顺序存储方式 (1)行优先顺序将数组元素按行排列,第i+1个行 向量紧接在第个行向量后面。以二维数组为例,按 行优先顺序存储的线性序列为: a11,a12/…a1na21a22…a2n………am1,am2……amn 在 PASCAL、C语言中,数组就是按行优先顺序存 储的。 (2)列优先顺序—将数组元素按列向量排列,第j+1 个列向量紧接在第个列向量之后,A的mn个元素 按列优先顺序存储的线性序列为 a11a21……am1a12a22…am2……,an1an2……anm 在 FORTRAN语言中,数组就是按列优先顺序存储的
通常有两种顺序存储方式: ⑴行优先顺序——将数组元素按行排列,第i+1个行 向量紧接在第i个行向量后面。以二维数组为例,按 行优先顺序存储的线性序列为: a11,a12,…,a1n,a21,a22,…a2n,……,am1,am2,…,amn 在PASCAL、C语言中,数组就是按行优先顺序存 储的。 ⑵列优先顺序——将数组元素按列向量排列,第j+1 个列向量紧接在第j个列向量之后,A的m*n个元素 按列优先顺序存储的线性序列为: a11,a21,…,am1,a12,a22,…am2,……,an1,an2,…,anm 在FORTRAN语言中,数组就是按列优先顺序存储的
以上规则可以推广到多维数组的情况:行优 先顺序可规定为先排最右的下标,从右到 左,最后排最左下标:列优先顺序与此相 反,先排最左下标,从左向右,最后排最 右下标。 按上述两种方式顺序存储的序组,只要 知道开始结点的存放地址(即基地址) 维数和每维的上、下界,以及每个数组元 素所占用的单元数,就可以将数组元素的 存放地址表示为其下标的线性函数。因此, 数组中的任一元素可以在相同的时间内存 取,即顺序存储的数组是一个随机存取结
以上规则可以推广到多维数组的情况:行优 先顺序可规定为先排最右的下标,从右到 左,最后排最左下标:列优先顺序与此相 反,先排最左下标,从左向右,最后排最 右下标。 按上述两种方式顺序存储的序组,只要 知道开始结点的存放地址(即基地址), 维数和每维的上、下界,以及每个数组元 素所占用的单元数,就可以将数组元素的 存放地址表示为其下标的线性函数。因此, 数组中的任一元素可以在相同的时间内存 取,即顺序存储的数组是一个随机存取结 构
例如,二维数组Am按“行优先顺序”存储在内存 中,假设每个元素占用个存储单元。 元素ai的存储地址应是数组的基地址加上排在a 前面的元素所占用的单元数。因为a位于第行 第j列,前面i-1行共有(-1)×b2个元素,第行 上a前面又有-1个元素,故它前面一共有(-1) b2+」1个元素,因此,a的地址计算函数为 LOc(a)=LOc(a1)+(-1)*b2+-1]L 同样,三维数组A按“行优先顺序”存储,其地址 计算函数为: Loc(ajk)=Loc(a11)+(-1)*b2*b3+(-1)*b3+(k 1)杜
例如,二维数组Amn按“行优先顺序”存储在内存 中,假设每个元素占用L个存储单元。 元素aij的存储地址应是数组的基地址加上排在aij 前面的元素所占用的单元数。因为aij位于第i行、 第j列,前面i-1行一共有(i-1) ×b2个元素,第i行 上aij前面又有j-1个元素,故它前面一共有(i-1) ×b2+j-1个元素,因此,aij的地址计算函数为: LOC(aij)=LOC(a11)+[(i-1)*b2+j-1]*L 同样,三维数组Aijk按“行优先顺序”存储,其地址 计算函数为: LOC(aijk)=LOC(a111)+[(i-1)*b2*b3+(j-1)*b3+(k- 1)]*L
上述讨论均是假设数组各维的下界是1,更 般的二维数组是A[c1b1,C2b2],这里 nC2不一定是1。a前一共有ic1行,二维数 组一共有b2C2+1列,故这i-C1行共有 C)(b2-C2+1)个元素,第行上a前一共有j C2个元素,因此,a的地址计算函数为 LoC(ai)=LoC(ac1c2)+[(i-C1)*(b2-C2+1)+j C2)杜 例如,在C语言中,数组各维下标的下界是0, b长度的数组下标为0.b-1。因此在C语言中, 一维数组a[bi[b的地址计算公式为 LOC(ai)=LoC(aoo)+(i*b2+j*
上述讨论均是假设数组各维的下界是1,更 一般的二维数组是A[c1..b1,c2..b2],这里 c1,c2不一定是1。aij前一共有i-c1行,二维数 组一共有b2-c2+1列,故这i-c1行共有(ic1)*(b2-c2+1)个元素,第i行上aij前一共有jc2个元素,因此,aij的地址计算函数为: LOC(aij)=LOC(ac1c2 )+[(i-c1)*(b2-c2+1)+jc2)]*L 例如,在C语言中,数组各维下标的下界是0, b长度的数组下标为0..b-1。因此在C语言中, 二维数组a[b1][b2]的地址计算公式为: LOC(aij)=LOC(a00)+(i*b2+j)*L
■更一般地,可以得到n维数组存储位置的计 算公式,如书P93映像函数。 P93,数组的顺序表示和实现
◼ 更一般地,可以得到n维数组存储位置的计 算公式,如书P93映像函数。 ◼ P93,数组的顺序表示和实现