第5章 数组和广义表 自测题含答案

第5章 数组和广义表 自测题含答案

一、单选题

1. 假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址。已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为 288 B ;末尾元素A57的第一个字节地址为 1282 ;若按行存储时,元素A14的第一个字节地址为 (8+4)×6+1000=1072 ;若按列存储时,元素A47的第一个字节地址为 (6×7+4)×6+1000)=1276 。

2. 〖00年计算机系考研题〗设数组a[1?60, 1?70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为 8950 。

答:不考虑0行0列,利用列优先公式: LOC(aij)=LOC(ac1,c2)+[(j-c2)*(d1-c1+1)+i-c1)]*L 得:LOC(a32,58)=2048+[(58-1)*(60-1+1)+32-1]]*2=8950

3. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的 行下标 、 列下标 和 元素值 。

4. 求下列广义表操作的结果:

(1) GetHead【((a,b),(c,d))】=== (a, b) ; //头元素不必加括号 (2) GetHead【GetTail【((a,b),(c,d))】】=== (c,d) ; (3) GetHead【GetTail【GetHead【((a,b),(c,d))】】】=== b ; (4) GetTail【GetHead【GetTail【((a,b),(c,d))】】】=== (d) ;

二、单选题( A )1. 〖01年计算机系考研题〗假设有60行70列的二维数组a[1?60, 1?

70]以列序为主序顺序存储,其基地址为10000,每个元素占2个存储单元,那么第32行第58列的元素a[32,58]的存储地址为 。(无第0行第0列元素)

A.16902 B.16904 C.14454 D.答案A, B, C均不对 答:此题与填空题第8小题相似。(57列×60行+31行)×2字节+10000=16902

( B )2. 设矩阵A是一个对称矩阵,为了节省存储,将其下三角部分(如下图所示)按行序存放在一维数组B[ 1, n(n-1)/2 ]中,对下三角部分中任一元素ai,j(i≤j), 在一维数组B中下标k的值是:

A.i(i-1)/2+j-1 B.i(i-1)/2+j C.i(i+1)/2+j-1 D.i(i+1)/2+j

?a?1,1A??a2,1a2,2?????an,1an,2

解:注意B的下标要求从1开始。 先用第一个元素去套用,可能有B和C; 再用第二个元素去套用B和C,B=2而C=3(不符);

所以选B ????a?n,n???3. 【91初程P78】 从供选择的答案中,选出应填入下面叙述 ? 内的最确切的解答,

把相应编号写在答卷的对应栏内。

有一个二维数组A,行下标的范围是0到8,列下标的范围是1到5,每个数组元素用相邻的4个字节存储。存储器按字节编址。假设存储数组元素A[0,1]的第一个字节的地址是0。存储数组A的最后一个元素的第一个字节的地址是 A 。若按行存储,则A[3,5]和A[5,3]的第一个字节的地址分别是 B 和 C 。若按列存储,则A[7,1]和A[2,4]的第一个字节的地址分别是 D 和 E 。 供选择的答案:

A~E:①28 ② 44 ③ 76 ④ 92 ⑤ 108

⑥ 116 ⑦ 132 ⑧ 176 ⑨ 184 ⑩ 188 答案:ABCDE=8, 3, 5, 1, 6

4.【94程P12】 有一个二维数组A,行下标的范围是1到6,列下标的范围是0到7,每个数组元素用相邻的6个字节存储,存储器按字节编址。那么,这个数组的体积是 A 个字节。假设存储数组元素A[1,0]的第一个字节的地址是0,则存储数组A的最后一个元素的第一个字节的地址是 B 。若按行存储,则A[2,4]的第一个字节的地址是 C 。若按列存储,则A[5,7]的第一个字节的地址是 D 。 供选择的答案

A~D:①12 ② 66 ③ 72 ④ 96 ⑤ 114 ⑥ 120

⑦ 156 ⑧ 234 ⑨ 276 ⑩ 282 (11)283 (12)288 答案:ABCD=12, 10, 3, 9

三、简答题

1. 【其他教材】已知二维数组Am,m采用按行优先顺序存放,每个元素占K个存储单元,并且第一个元素的存储地址为Loc(a11),请写出求Loc(aij)的计算公式。如果采用列优先顺序存放呢?

解:公式教材已给出,此处虽是方阵,但行列公式仍不相同;

按行存储的元素地址公式是: Loc(aij)= Loc(a11) +[ (i-1)*m+(j-1) ] * K 按列存储的元素地址公式是: Loc(aij)= Loc(a11) +[ (j-1)*m+(i-1) ] * K

2.【全国专升本资格考试】递归算法比非递归算法花费更多的时间,对吗?为什么?

答:不一定。时间复杂度与样本个数n有关,是指最深层的执行语句耗费时间,而递归算法与非递归算法在最深层的语句执行上是没有区别的,循环的次数也没有太大差异。仅仅是确定循环是否继续的方式不同,递归用栈隐含循环次数,非递归用循环变量来显示循环次数而已。

四、计算题

1. (P60 4-18)用三元组表表示下列稀疏矩阵:

?00000000??00000000??00000?2????000090??03000800?????00000000? (2)?000000? (1)????00060000?005000?????000000??00000000????00000005?000030?????20000000?解:参见填空题4. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的 行下标 、 列下标 和 元素值 。 所以(1)可列表为: (2)可列表为: 8 3 3 5 7 8 8 2 6 4 8 1 5 3 8 6 5 2 6 1 2 4 6 6 6 5 3 5 4 -2 9 5 3

2. (P60 4-19)下列各三元组表分别表示一个稀疏矩阵,试写出它们的稀疏矩阵。

?646??455??122??111??????2112??249???(1)?313? (2)??

328???444??356???536????437????6116??解:(1)为6×4矩阵,非零元素有6个。 (2)为4×5矩阵,非零元素有5个

0 2 0 0 1 0 0 0 0

12 0 0 0 0 0 0 9 0

3 0 0 0 0 8 0 0 6

0 0 0 4 0 0 7 0 0

0 0 6 0

16 0 0 0

五、算法设计题

1. 【严题集5.18⑤】试设计一个算法,将数组An 中的元素A[0]至A[n-1]循环右移k位,

并要求只用一个元素大小的附加存储,元素移动或交换次数为O(n) 解:

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4