行n列的二维数组的顺序存储方式只能按行优先或列优先存放。 假设按行优先存放,有LOC(ai,j)=LOC(a0,0)+(i×n+j)×k,对于a[6][2]元素,其地址 LOC(a[6][2])=LOC(a[0][0])+[6×20+2]×1=322。 假设按列优先存放,有LOC(ai,j)=LOC(a0,0)+(j×m+i)×k,对于a[6][2]元素,其地址 LOC(a[6][2])=LOC(a[0][0])+[2×10+6]×1=226。 总结:m为行,n为列,单个元素k占多少存储单元 按行优先存放,第一个元素地址为a[0][0]的话,有LOC(ai,j)=LOC(a0,0)+(i×n+j)×k; 按行优先存放,第一个元素地址为a[1][1]的话,有LOC(ai,j)=LOC(a1,1)+[(i-1)×n+(j-1)]×k 按列优先存放,第一个元素地址为a[0][0]的话,有LOC(ai,j)=LOC(a0,0)+(j×m+i)×k; 按列优先存放,第一个元素地址为a[1][1]的话,有LOC(ai,j)=LOC(a1,1)+[(j-1)×m+(i-1)]×k 4、判断题:一个C/C++二维数组A[0..4,0..5],每个元素占2个字节,按行优先顺序存放,a4,5元素的起始地址为1044,则该数组的起始地址为860 解释:答案肯定是错误的,首先二维数组A是一个5*6的一个二维数组,m=5,n=6,k=2;故有:LOC(A[0][0])+(i*n+j)*k ,LOC(a[0][0])+(4*6+5)*2 = 1044;得A[0][0]=1044-58=986; 5、设二维数组a[1..5][1..8],若按列优先的顺序存放数组的元素,则a[4][6]元素的前面有_B_个元素。 A、6 B、28 C、29 D、40 解释:该数组的行、列号从1开始,当按列优先的顺序存储时,a[4][6]元素的前有1~5列,每列5-1+1=5个元素,小计25个元素,在第6列中,a[4][6]元素的前有a[1..3][6]共3个元素,所以a[4][6]元素的前面有25+3=28个元素。
广义表