无论规定行优先或列优先,只要知道以下三要素便可随时求出 任一元素的地址(意义:数组中的任一元素可随机存取)y: ①开始结点的存放地址(即基地址 ②维数和每维的上、下界; ③每个数组元素所占用的单元数 ac1.c2 ac1,d2 a 补充:计算二维数组元素地址的通式 aal,c2.adl,d2 设一般的二维数组是A[c1.d1,c2d2],这里c1,c2不一定是0或1 则行优先存储时的地址公式为: LOC()=LOC(ac1,)+[(i-c)*(d2-c2+1)+j-C2)l 数组基址 之前的行 总列数,即 单个元素 数 第维长度 本行前面 的元素个数 长度 二 维数组列优先存储的通式为 LOC(aij)=LOC(ac1,c2)+[j-c2)*(di-c1+1)+i-c1)]*L 6
6 补充:计算二维数组元素地址的通式 设一般的二维数组是A[c1.d1, c2.d2],这里c1,c2不一定是0或1 无论规定行优先或列优先,只要知道以下三要素便可随时求出 任一元素的地址(意义:数组中的任一元素可随机存取): 二维数组列优先存储的通式为: LOC(aij)=LOC(ac1,c2 )+[(j-c2)*(d1-c1+1)+i-c1)]*L ac1,c2 . ac1,d2 . aij . ad1,c2 . ad1,d2 Amn = 单个元素 长度 aij之前的行 数 数组基址 总列数,即 第2维长度 aij本行前面 的元素个数 ①开始结点的存放地址(即基地址) ②维数和每维的上、下界; ③每个数组元素所占用的单元数 则行优先存储时的地址公式为: LOC(aij)=LOC(ac1,c2 )+[(i-c1)*(d2-c2+1)+j-c2)]*L
例1:如何求出a(3,2)的存储地址? 0 1 2 3 a(0,0) a(0,1) a0,3) a(1,0) a(1,1) a(1,3) 2 。,。 .。 。,。 ,。,。 3 a(3,2) g 6 a(6,0) a(6,3) 要事先确定: ①是行优先方式还是列优先方式? 否则无法 ②数组的首地址是多少? 求出结果 ③每个元素的长度? 7
7 a(0,0) a(0,1) . a(0,3) a(1,0) a(1,1) . a(1,3) . . . . . . a(3,2) . . . . . . . . . a(6,0) . . a(6,3) 0 1 2 3 0 1 2 3 4 5 6 例1:如何求出a(3,2)的存储地址? 要事先确定: ①是行优先方式还是列优先方式? ②数组的首地址是多少? ③每个元素的长度? 否则无法 求出结果
例2〖软考题】 :一个二维数组A,行下标的范围是1到6,列 下标的范围是0到7,每个数组元素用相邻的6个字节存储,存 储器按字节编址。那么,这个数组的体积是288个字节。 答:V6lume=m*n*L六(6-1+1)*(7-01)*6=48*6=288 例3:已知二维数组Amm按行存储的元素地址公式是: L0c(a)=Loc(a1+[(i-1)*m+(Gj-1*K,请问按列存储的公式 相同吗? 答:尽管是方阵,但公式仍不同。应为: Loc(a)Loc(a+[0-1)*m+(i-1)]*K 8
8 例3:已知二维数组Am,m按行存储的元素地址公式是: Loc(aij)= Loc(a11)+[(i-1)*m+(j-1)]*K , 请问按列存储的公式 相同吗? 答:尽管是方阵,但公式仍不同。应为: Loc(aij)=Loc(a11)+[(j-1)*m+(i-1)]*K 例2〖软考题〗:一个二维数组A,行下标的范围是1到6,列 下标的范围是0到7,每个数组元素用相邻的6个字节存储,存 储器按字节编址。那么,这个数组的体积是 288 个字节。 答: Volume=m*n*L=(6-1+1)*(7- 0 +1)*6=48*6=288
例4:〖00年计算机系考研题〗:设数组a1.60,1.701 的基地址为2048,每个元素占2个存储单元,若以列序为主 序顺序存储,则元素a32,581的存储地址为8950 答:请注意审题! 根据列优先公式Loc(a=Loc(aG)*m+(-*K 得:L0C(a32-58)=2048+1(58-1)*60+(32-1)1*2=8950 想一想:若数组是a0.59, 0.691,结果是否仍为8950? 维界虽未变,但此时的a32,58]不 再是原来的a32,581 9
9 例4 :〖00年计算机系考研题〗 :设数组a[1.60, 1.70] 的基地址为2048,每个元素占2个存储单元,若以列序为主 序顺序存储,则元素a[32,58]的存储地址为 。 根据列优先公式Loc(aij)=Loc(a11)+[(j-1)*m+(i-1)]*K 得:LOC(a32,58)=2048+[(58-1)*60+(32-1)]*2=8950 答:请注意审题! 想一想:若数组是a[0.59, 0.69],结果是否仍为8950? 8950 维界虽未变,但此时的a[32,58]不 再是原来的a[32,58]