大学士考试网

考研动态 考研英语 考研政治 考研数学 专业课 模拟试题 历年真题

2014年考研数据结构辅导(21)

专业课  时间: 2019-03-09 12:17:11  作者: 匿名 

数组元素的地址计算

例如: Loc(a00) = b

Loc(ai0) = b+( ai0前元素个数)•L=b+(i•n)•L

Loc(aij) = b+( aij前元素个数)•L= b+[i×n+j]×L

有一个二维数组A[0:8,1:5],每个数组元素用相邻的4个字节存储,存储器按字节编址,假设存储数组元素A[0,1]的第一个字节的地址是100,存储数组A的最后一个元素的第一个字节的地址是( ① )。若按行存储,则A[3,5]和 A[5,3]的第一个字节的地址是( ② ) 和( ③ )。若按列存储,则A[7,1]和A[2,4]的第一个字节的地址是( ④ )和( ⑤ )。

解:显然A[0,1]是该数组的第一个元素。数组共有9×5=45个元素,最后一个元素前面共有44个元素,loc(A[8,5])=loc(A[0,1])+44*L=100+44*4=276; 若按行存储,A[3,5]前面的第0行,第1行,第2行肯定存满了。第三行有A[3,1],A[3,2],A[3,3],A[3,4]在他前面,所以此时在A[3,5]前面有3×5+4=19个元素,loc(A[3,5])=loc(A[0,1])+19*L=100+19×4=176;同理A[5,3]前面的第0行,第1行,第2行。。。。第4行肯定存满了。第5行有A[5,1],A[5,2]在他前面,所以此时在A[5,3]前面有5×5+2=27个元素,loc(A[5,3])=loc(A[0,1])+27*L=100+27×4=208;若按列存储,A[7,1]前面的列肯定已经存满了,而A[7,1]在最前面的列上,在同列且在他前面的有A[0,1],A[1,1],A[2,1],...A[6,1],所以在A[7,1]前面共有0+7个元素

loc(A[7,1])=loc(A[0,1])+7*L=100+7×4=128;同理A[2,4],在他前面的列 第1列第2列第3列已经存满,同列且在他前面的有A[0,4],A[1,4],所以A[2,4]前面共有3×9+2=29个元素 loc(A[2,4])=loc(A[0,1])+29*L=100+29×4=216

猜你喜欢

精选专题