数组的存储结构6.1.21.一维数组一维数组的所有元素依逻辑次序存放在一片连续的内存存储单元中。其起始地址为第一个元素a的地址即Loc(a)。假设每个数据元素占用个存储单元。则任一数据元素a,的存储地址LOc(a)就可由以下公式求出(1≤i<n)LOC(a;)=LOC(ae)+i×k一维数组具有随机存储特性6/57
1. 一维数组 一维数组的所有元素依逻辑次序存放在一片连续的内存存储单元中。 其起始地址为第一个元素a0的地址即LOC(a0)。 假设每个数据元素占用k个存储单元。 则任一数据元素ai的存储地址LOC(ai)就可由以下公式求出 LOC(ai)=LOC(a0)+i×k (1≤i<n) 一维数组具有随机存储特性 6/57
2.d维数组以m行n列的二维数组AmXn=(ai)为例讨论(二维数组也称为矩阵)ao,n-1ao,1ao,0a1,n-1ai,oai,1:.1:Lam-1,0am-1,1am-1,n-1-..7/57
2. d维数组 以m行n列的二维数组Am×n=(ai,j)为例讨论(二维数组也称为矩阵)。 7/57
ao,n-1ao,1ao,0a1n-1ai,1a1,0:::[am-1,0am-1,1am-1,n-1按行优先存储假设每个元素占k个存储单元,Loc(aa.a)表示aa.a元素的存储地址。对于元素ai,j:ai,前面有0~i-1共i行,每行n个元素,共有i×n个元素。在第i行中前面有a[i,o..j-1],共j个元素。合起来,aij前面有iXn+j个元素。Loc(ai,)=Loc(aoe) + (iXn + j)xk8/57
按行优先存储 ai,j前面有0~i-1共i行,每行n个元素,共有i×n个元素。 在第i行中前面有a[i,0.j-1],共j个元素。 合起来,ai,j前面有i×n+j个元素。 LOC(ai,j)=LOC(a0,0) + (i×n + j)×k 假设每个元素占k个存储单元,LOC(a0,0)表示a0,0元素的存储地址。 对于元素ai,j: 8/57
ao,n-1ao,1ao,0a1n-1ai,1a1,0:.:Lam-1,0am-1,1am-1,n-1按列优先存储假设每个元素占k个存储单元,Loc(ae,)表示ae.e元素的存储地址。对于元素ai,j:ai,前面有~j-1共j列,每列m个元素,共有jXm个元素。在第j列中前面有a[0..i-1,j],共i个元素。合起来,ai,前面有j×m+i个元素。则:Loc(aii)=LOc(age)+(jXm+i)xk二维数组也具有随机存储特性,以此类推9/57
按列优先存储 ai,j前面有0~j-1共j列,每列m个元素,共有j×m个元素。 在第j列中前面有a[0.i-1,j],共i个元素。 合起来,ai,j前面有j×m+i个元素。则: LOC(ai,j)=LOC(a0,0) + (j×m + i)×k 假设每个元素占k个存储单元,LOC(a0,0)表示a0,0元素的存储 地址。对于元素ai,j: 二维数组也具有随机存储特性,以此类推。 9/57
更一般地,数组A[c1..di,C2..d,],则该数组按行优先存储时有:Loc(ai, j)=LOc(ac1, c2)+[(i-c1)X(d2-C2+1)+(j-c2)]×k按按行优先存储时有:LOc(ai, j)=LOc(ac1, c2)+[(j-c2)X(di-Ci+1)+(i-1)]Xk10/57
更一般地,数组A[c1.d1,c2.d2],则该数组按行优先存储时有: LOC(ai,j)=LOC(ac1,c2)+[(i-c1)×(d2-c2+1)+(j-c2)]×k 按按行优先存储时有: LOC(ai,j)=LOC(ac1,c2)+[(j-c2)×(d1-c1+1)+(i-c1)]×k 10/57