数组和广义表习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
习题五数组
5.1 单项选择题(其中A[i..j]表示下标从i到j)
1. 常对数组进行的两种基本操作是__C__。
A. 建立与删除
B. 索引和修改
C. 查找和修改
D. 查找与索引
2. 二维数组M的成员是6个字符(每个字符占一个存储单元,即一个字节)组成的串,行下标i的范围从0到8,列下标j的范围从1到10,则存放M 至少需要__①D__个字节;M 的第8列和第5行共占__②B__个字节。
①A. 90 B. 180 C. 240 D. 540
②A. 108 B. 114 C. 54 D. 60
4. 数组A中,每个元素A的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放在存储器内,存放该数组至少需要的单元数是__C__。
A. 80
B. 100
C.240
D. 270
5. 数组A中,每个元素A的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放在存储器内,该数组按行存放时,元素A[8][5]的起始地址为_C___。
A. SA+141
B. SA+144
C. SA+222
D. SA+225 (7*10+4)*3=222
6. 数组A中,每个元素A的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放在存储器内,该数组按列存放时,元素A[5][8]的起始地址为_B___。
A. SA+141
B. SA+180
C. SA+222
D. SA+225 (7*8+4)*3=180
5.2 填空题(将正确的答案填在相应的空中,其中A[i,j]表示下标从i到j)
1. 已知二维数组A[m][n]采用行序为主方式存储,每个元素占k个存储单元,并且第一个元素的存储地址是LOC(A[0][0]),则A[i][j]的地址是_ LOC(A[0][0]) +(i*n+j)*k___。
2. 二维数组A[10][20]采用列序为主方式存储,每个元素占一个存储单元并且A[0][0]的存储地址是200,则A[6][12]的地址是_326___。200+(12*10+6)*1=326
3. 二维数组A[10..20][5..10]采用行序为主方式存储,每个元素占4个存储单元,并且A[10][5]的存储地址是1000,则A[18][9]的地址是__1000+(8*6+4)*4=1208__。
5.3算法设计题:
1. 假设稀疏矩阵A和B均以三元组顺序表作为存储结构。试写出矩阵相加的算法,另设三元组表C存放结果矩阵。
2. 假设系数矩阵A和B均以三元组顺序表作为存储结构。试写出满足以下条件的矩阵相加
的算法:假设三元组顺序表A的空间足够大,将矩阵B加到矩阵A上,不增加A,B之外的附加空间,你的算法能否达到O(m+n)的时间复杂度?其中m和n分别为A,B矩阵中非零元的数目。
3.试编写一个以三元组形式输出用十字链表表示的稀疏矩阵中非零元素及其下标的算法。4.求下列广义表操作的结果:
(1)GetTail[GetHead[((a,b),(c,d))]];
(2)GetTail[GetHead[GetTail[((a,b),(c,d))]]]
5.利用广义表的GetHead和GetTail操作写出如上题的函数表达式,把原子banana分别从下列广义表中分离出来.
=(((apple))),((pear)),(banana),orange);
(1) L
5
=(apple,(pear,(banana),orange));
(2) L
7
习题答案
5.1 1. C 2. D,B 4. C 5. C
6. B
5.2 1. LOC (A[0][0])+(n*i+j)*k
2. 326
3. 1208