当前位置:文档之家› 《数据结构》习题集:章 数组与广义表

《数据结构》习题集:章 数组与广义表

《数据结构》习题集:章 数组与广义表
《数据结构》习题集:章 数组与广义表

第5章数组与广义表

一、选择题

1.在以下讲述中,正确的是(B )。

A、线性表的线性存储结构优于链表存储结构

B、二维数组是其数据元素为线性表的线性表

C、栈的操作方式是先进先出

D、队列的操作方式是先进后出

2.若采用三元组压缩技术存储稀疏矩阵,只要把每个元素的行下标和列下标互换,就完成了对该矩阵的转

置运算,这种观点( B )。

A、正确

B、错误

3.二维数组SA 中,每个元素的长度为3 个字节,行下标I 从0 到7,列下标J 从0 到9,从首地址SA 开始

连续存放在存储器内,该数组按列存放时,元素A[4][7]的起始地址为( B )。

A、SA+141

B、SA+180

C、SA+222

D、SA+225

4.数组SA 中,每个元素的长度为3 个字节,行下标I 从0 到7,列下标J 从0 到9,从首地址SA 开始连续

存放在存储器内,存放该数组至少需要的字节数是( C )。

A、80

B、100

C、240

D、270

5.常对数组进行的两种基本操作是(C )。

A、建立与删除

B、索引和修改

C、查找和修改

D、查找和索引

6.将一个A[15][15]的下三角矩阵(第一个元素为A[0][0]),按行优先存入一维数组B[120]中,A 中元素A[6][5]

在B 数组中的位置K 为(B )。

A、19

B、26

C、21

D、15

7.若广义表A 满足Head(A)=Tail(A),则A 为(B )。

A、()

B、(())

C、((),())

D、((),(),())

8.广义表((a),a)的表头是(C ),表尾是(C )。

A、a

B、b

C、(a)

D、((a))

9.广义表((a,b),c,d)的表头是(C ),表尾是(D )。

A、a

B、b

C、(a,b)

D、(c,d)

10.广义表((a))的表头是(B ),表尾是(C )。

A、a

B、(a)

C、()

D、((a))

11.广义表(a,b,c,d)的表头是(A ),表尾是(D )。

A、a

B、(a)

C、(a,b)

D、(b,c,d)

12.广义表((a,b,c,d))的表头是(C ),表尾是(B )。

A、a

B、()

C、(a,b,c,d)

D、((a,b,c,d))

13.下面结论正确的是(BC )。

A、一个广义表的表头肯定不是一个广义表

B、一个广义表的表尾肯定是一个广义表

C、广义表L=((),(A,B))的表头为空表

D、广义表中原子个数即为广义表的长度

14.广义表A=(A,B,(C,D),(E,(F,G))),则head(tail(head(tail(tail(A)))))=( D )

A、(G)

B、(D)

C、C

D、D

15.已知广义表L=((x,y,z),a,(u,t,w)),从L 表中取出原子项t 的操作是(D )。

A 、Head(Head(Tail(Tail(L))))

B 、Tail(Head(Head(Tail(L))))

C 、Head(Tail(Head(Tail(L))))

D 、Head(Tail(Head(Tail(Tail(L)))))

16.16、设A=(a,b,(c,d),(e,(f,g))),则Head(Tail(Head(Tail(Tail(A)))))=( D )

A. (g)

B.(d)

C.c

D.d

17.对矩阵压缩存储是为了(B )

A、方便运算

B、节省空间

C、方便存储

D、提高运算速度

18.稀疏矩阵一般的压缩存储方法有两种,即(C )

A、二元数组和三元数组

B、三元组和散列

C、三元组和十字链表

D、散列和十字链表

二、判断题

1.数组是同类型值的集合。X

2.数组的存储结构是一组连续的内存单元。V

3.数组是一种复杂的数据结构,数组元素之间的关系,即不是线性的也不是树形的。X

4.插入和删除操作是数据结构中最基本的两种操作,所以这两种操作在数组中也会经常使用。X

5.使用三元组表表示稀疏矩阵的元素,有时并不能节省存储空间。V

6.广义表是由零个或多个原子或子表所组成的有限序列,所以广义表可能为空表。V

7.线性表可以看成是广义表的特例,如果广义表中的每个元素是原子,则广义表便成为线性表。V

8.广义表中原子个数即为广义表的长度。X

9.广义表中元素的个数即为广义表的深度。X

三、填空题

1.设a 是含有N 个分量的整数数组,则求该数组中最大整数的递归定义为(最大整数的递归定义为:f(k)=a[0](k=0

时)||f(k)=max(f(k-1),a[k])(k>0 时)),最小整数的递归定义为(最小整数的递归定义为:f(k)=a[0](k=0 时)||f(k)=min(f(k-1),a[k])(k>0 时))。

2.二维数组A[10][5]采用行序为主方式存储,每个元素占4 个存储单元,并且A[5][3]的存储地址是1000,则A[8][2]

的地址是(1056 )。

3.二维数组A[m][n]采用行序为主方式存储,每个元素占k 个存储单元,并且第一个元素的存储地址是

Loc(A[0][0]),则A[i][j]的地址是(loc(A[0][0])+(n*I+j)*k )。

4.广义表的(深度)定义为广义表中括弧的重数。

5.设广义表L=((),()),则Head(L)=(() );Tail(L)=((()) );L 的长度是(2 );L 的深度是(2 )。

6.广义表中的元素可以是(原子或子表),其描述宜采用程序设计语言中的(链表)表示。

7.广义表(((a)))的表头是(((a))),表尾是(() )。

8.广义表((a),((b),c),(((d))))的表头是((a)),表尾是((((b),c),(((d)))) )。

9.设广义表A=(x,((a,b),c,d)),则Head(Head(Tail(A)))=((a,b))。

10.设广义表A=(a,b,c),B=(A,(c,d)),C=(a,(B,A),(e,f)),则

(1)Head(A)=( a ) (2)Tail(B)=( ((c,d)) )

(3)Head(Head(Head(Tail(C))))=( A )

11.下三角矩阵A[1..N,1..N]的下三角元素已压缩到一维数组S[1..N*(N+1)/2+1]中,若按行序为主序存储,则A[I,j]

对应的S 中的存储位置是()。

12. 已知一个稀疏矩阵为????????????-0000510000030200,则对应的三元组表表示为

) 。

13. 一个n*n 的对称矩阵,如果以行或列为主序存入内存,则其容量为 ( n(n+1)/2 )。

14. 三维数组A[c1..d1,c2..d2..,c3..d3]共有( (d1-c1+1)*(d2-c2+1)*(d3-c3+1) )个元素。

15. 数组A[1..10,-2..6,2..8]以行优先顺序存储,设基地址为100,每个元素占3 个存储单元,则元素A[5,0,7]的存储

地址是( 913 )。

16. 将一个下三角矩阵A[1..100,1..100]按行优先存入一维数组B[1..n]中,A 中元素A[66,65]在B 数组中的位置为

( 2210 )。

四、 计算题

1. 数组 A[8][6][9]以行主序存储,设第一个元素的首地址是54,每个元素的长度为5,求元素A[2][4][5]的存储地

址。

A[2][4][5]的存储地址为loc(2,4,5)=loc(0,0,0)+(2*6*9+4*9+5)*5=54+149*5=799

2. 假设二维数组 A6x8,每个元素用相邻的6 个字节存储,存储器按字节编址,已知A 的基地址为1000,计算:

(1)数组A 的体积(存储量)

(2)A 的最后一个元素第一个字节的地址

(3)按行存储时,a 14 的第一个字节的地址

(4)按列存储时,a 47 的第一个字节的地址。

答案:(1)存储量=(6*8)*6=288

(2)数组A 的最后一个元素a57 的地址:1000+288-6=1282

(3)按行存储时,a14 的地址:1000+(1*8+4)*6=1072

(4)按列存储时,a47 的地址:1000+(7*6+4)*6=1276

3. 假设按低下标优先存储整数数组 A 9x3x5x8 时,第一个元素的字节地址是100,每个整数占4 个字节。

问下列元素的存储地址是什么?

(1)a 0000 100

(2) a 1111 776

(3) a 3125 1784

(4)a 8247 4416

4. 按行优先顺序和按列优先顺序分别列出四维数组 A[2][2][2][2]所有元素在内存中的存储顺序。

四维数组A 的按行优先顺序在内存中的存储次序为:A0000、A0001、A0010、A0011、

A0100、A0101、A0110、A0111、A1000、A1001、A1010、A1011、A1100、A1101、A1110、

A1111;按列优先存储顺序为:A0000、A1000、A0100、A1100、A0010、A1010、A0110、

A1110、A0001、A1001、A0101、A1101、A0011、A1011、A0111、A1111

5. 一个 n 阶对称矩阵A 采用一维数组S 按行序为主序存放其上三角各元素,写出S[k]与A[i,j]的关系公式。设

A[1,1]存于S[1]中。

k=(I-1)(2n-I+2)/2+j-I+1 (I<=j 时) 和k=(j-1)(2n-j+2)/2+I-j+1 (I>j 时)

五、简答题

1.什么是广义表,简述广义表与线性表的主要区别?

广义表是线性表的推广,形式上定义为LS=(a1,a2,…,a n),a i 可以是单个元素,也可以是

广义表,并分别称为广义表的原子和子表。

主要区别是:线性表中元素只能是单个元素,而广义表中元素可以是单个元素,也可以是广义表;线性表中各元素是独立的,而广义表中元素可以为其他表或子表共享,特别地,广义表可以是一个递归的表,即广义表也可以是其本身的一个子表。

2.利用广义表的Head 和Tail 运算把原子student 从下列广义表中分离出来。

(1)L1=(soldier,teacher,student,worker,farmer)

(2)L2=(soldier,(teacher,student),(worker,farmer))

Head(Tail(Tail(L1)))=student Head(Tail(Head(Tail(L2))))=student

3.画出下列广义表的存储结构图,并求它的深度。

(1)((( )),a,((b,c)),(((d)))) (2)((((a),(b))),((( ),d),(e,f)))

4.已知图4.4 为广义表的存储结构图,写出各图的广义表。

解答:(1)((x,(y)),(((( ))),( ),(z)))

(2)(((a,b,( )),( )),(a,(b)),( ))

六、设计题

1.对于二维数组A[m][n],分别编写相应函数实现如下功能:

(1)求数组 A 靠边元素之和;

(2)求从A[0][0]开始的互不相邻的各元素之和;(3)当m=n 时分别求两条对角线上的元素之和,否则打印出

m≠n 的信息。

2.如果矩阵A 中的一个元素A[i][j]满足下列条件:A[i][j]是第I 行中最小的元素,又是第j 列中值最大的元素,

则称之为该矩阵的一个马鞍点。编写函数计算m×n 的矩阵A 的所有马鞍点,并分析算法的时间复杂度。

第五章 数组和广义表

第五章数组和广义表 一.选择题 1.在二维数组A 中引用A[i,j]的时间_________。 A.与i、j的大小有关 B.与i、j的大小无关 C.与i的大小有关,与j的大小无关 D.与i的大小无关,与j的大小有关 2.在稀疏矩阵的带行指针向量的链接存储中,每一行单链表中的结点都具有相同的________。 A.行号 B.列号 C.元素值 D.地址 3.二维数组A 按行顺序存储,其中每个元素占1个存储单元。若 A[1][1]的存储地址为420, A[3][3]的存储地址为446,则A[5][5]的存储地址为_______。A.470 B.471 C.472 D. 473 4.在稀疏矩阵的十字链接存储中,每个列单链表中的结点都具有相同的_____。A.行号 B.列号 C.元素值 D.地址 5.下面的说法中,不正确的是________。 A.对称矩阵中只须存放包括主对角线元素在内的下(或上)三角部分的元素即可B.对角矩阵中只须存放的非零元素即可 C.稀疏矩阵中值为零的元素较多,因此可以采用三元组表方法存储 D.稀疏矩阵中大量值为零的元素分布有规律,因此可以采用三元组表方法存储6.对一些特殊矩阵采用压缩存储的目的主要是为了________。 A.表达变得简单 B.对矩阵元素的存取变得简单 C.去掉矩阵中的多余元素 D.减少不必要的存储空间的开销 7.若将n 阶对称矩阵 A 按照行序为主序方式将包括主对角线元素在内的下三角形的所有元素依次存放在一个一维数组 B 中,则该对称矩阵在 B 中占用了________个数组元素。 A.n2 B.n*(n-1) C.n*(n+1)/2 D.n*(n-1) 8. 稀疏矩阵的三元组顺序表表示的一个三元组中不包括________。 A. 行号 B.列号 C.元素值 D.元素总数 9.稀疏矩阵一般的压缩存储方法有两种,即________。 A.二维数组和三维数组 B.三元组和散列 C. 三元组和十字链表 D.散列和十字链表 10.有一个 10 阶对称矩阵 A,采用压缩存储方式(以行序为主存储,且A[0 Ⅱ0]=1),则A[8][5]的地址是________。 A.52 B.48 C.54 D.53 11.数组通常具有的两种基本操作是________。 A.建立与删除 B.索引和修改 C.查找和修改 D.查找与索引12.二维数组M 的成员是 6 个字符(每个字符占一个存储单元)组成的串,行下标 i 的范围从0 到 8,列下标j 的范围从1到10,则存放M 至少需要________个字节。 A.90 B.180 C.240 D.540 13.二维数组M 的元素是4 个字符(每个字符占一个存储单元)组成的串,行下标 i 的范围从0 到 4 ,列下标j 的范围从0 到 5,M 按行存储时元素M[3 Ⅱ5]的起始地址与M 按列存储时元素________的起始地址相同。

数据结构 第五章数组和广义表

第五章数组和广义表:习题 习题 一、选择题 1.假设以行序为主序存储二维数组A[1..100,1..100],设每个数据元素占两个存储单元,基地址为10,则LOC(A[5,5])=( )。 A. 808 B. 818 C. 1010 D. 1020 2.同一数组中的元素( )。 A. 长度可以不同B.不限C.类型相同 D. 长度不限 3.二维数组A的元素都是6个字符组成的串,行下标i的范围从0到8,列下标j的范圈从1到10。从供选择的答案中选出应填入下列关于数组存储叙述中( )内的正确答案。 (1)存放A至少需要( )个字节。 (2)A的第8列和第5行共占( )个字节。 (3)若A按行存放,元素A[8]【5]的起始地址与A按列存放时的元素( )的起始地址 一致。 供选择的答案: (1)A. 90 B. 180 C. 240 D. 270 (2) A. 108 B. 114 C. 54 D. 60 (3)[8][5] B. A[3][10] [5][8] [O][9] 4.数组与一般线性表的区别主要是( )。 A.存储方面 B.元素类型方面 C.逻辑结构方面 D.不能进行插入和删除运算 5.设二维数组A[1..m,1..n]按行存储在数组B[1..m×n]中,则二维数组元素A[i,j]在一维数组B中的下标为( )。 A. (i-l)×n+j B. (i-l)×n+j-l C.i×(j-l) D. j×m+i-l 6.所谓稀疏矩阵指的是( )。 A.零元素个数较多的矩阵 B.零元素个数占矩阵元素中总个数一半的矩阵 C.零元素个数远远多于非零元素个数且分布没有规律的矩阵 D.包含有零元素的矩阵 7.对稀疏矩阵进行压缩存储的目的是( )。 A.便于进行矩阵运算 B.便于输入和输出 C.节省存储空间 D. 降低运算的时间复杂度 8.稀疏矩阵一般的压缩存储方法有两种,即( )。 A.二维数组和三维数组 B.三元组和散列 C.三元组和十字链表 D.散列和十字链表 9.有一个100×90的稀疏矩阵,非0元素有10个,设每个整型数占两字节,则用三元组表示该矩阵时,所需的字节数是( )。 A. 60 B. 66 C.18000 D.33 10. A[N,N]是对称矩阵,将下面三角(包括对角线)以行序存储到一维数组T[N(N+I)/2] 中,则对任一上三角元素a[i][j]对应T[k]的下标k是( )。 A. i(i-l)/2+j B. j(j-l)/2+i C. i(j-i)/2+1 D. j(i-l)/2+1 11.已知广义表L=((x,y,z),a,(u,t,w)),从L表中取出原子项t的运算是( ) A. head(tail(tail(L))) B. tail(head(head(taiI(L)))) C. head(tail(head(taiI(L)))) D. head(tail(head(tail(tail(L)))))

(完整word版)数据结构第五章数组和广义表习题及答案

习题五数组和广义表 一、单项选择题 1.常对数组进行的两种基本操作是() A.建立与删除 B. 索引与修改 C. 查找与修改 D. 查找与索引2.对于C语言的二维数组DataType A[m][n],每个数据元素占K个存储单元,二维数组中任意元素a[i,j] 的存储位置可由( )式确定. A.Loc[i,j]=A[m,n]+[(n+1)*i+j]*k B.Loc[i,j]=loc[0,0]+[(m+n)*i+j]*k C.Loc[i,j]=loc[0,0]+[(n+1)*i+j]*k D.Loc[i,j]=[(n+1)*i+j]*k 3.稀疏矩阵的压缩存储方法是只存储 ( ) A.非零元素 B. 三元祖(i,j, aij) C. aij D. i,j 4. 数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000的内存单元中,则元素A[5,5]的地址是( )。 A. 1175 B. 1180 C. 1205 D. 1210 5. A[N,N]是对称矩阵,将下面三角(包括对角线)以行序存储到一维数组T[N(N+1)/2]中,则对任一上三角元素a[i][j]对应T[k]的下标k是()。 A. i(i-1)/2+j B. j(j-1)/2+i C. i(j-i)/2+1 D. j(i-1)/2+1 6. 用数组r存储静态链表,结点的next域指向后继,工作指针j指向链中结点,使j 沿链移动的操作为( )。 A. j=r[j].next B. j=j+1 C. j=j->next D. j=r[j]-> next 7. 对稀疏矩阵进行压缩存储目的是()。 A.便于进行矩阵运算 B.便于输入和输出 C.节省存储空间 D.降低运算的时间复杂度 8. 已知广义表LS=((a,b,c),(d,e,f)),运用head和tail函数取出LS中原子e的运算是( )。 A. head(tail(LS)) B. tail(head(LS)) C. head(tail(head(tail(LS))) D. head(tail(tail(head(LS)))) 9. 广义表((a,b,c,d))的表头是(),表尾是()。 A. a B.() C.(a,b,c,d) D.(b,c,d) 10. 设广义表L=((a,b,c)),则L的长度和深度分别为()。 A. 1和1 B. 1和3 C. 1和2 D. 2和3 11. 下面说法不正确的是( )。 A. 广义表的表头总是一个广义表 B. 广义表的表尾总是一个广义表 C. 广义表难以用顺序存储结构 D. 广义表可以是一个多层次的结构 二、填空题 1.通常采用___________存储结构来存放数组。对二维数组可有两种存储方法:一种是以___________为主序的存储方式,另一种是以___________为主序的存储方式。 2. 用一维数组B与列优先存放带状矩阵A中的非零元素A[i,j] (1≤i≤n,i-2≤j≤i+2),B 中的第8个元素是A 中的第_ _行,第_ _列的元素。

习题2参考答案及数组广义表习题

习题2参考答案 一、单项选择题 1.A 2.A 3.D 4.C 5.D 6.A 7.B 8.B 9.C 10.A 11.D 12.B 13.C 14.B 15.C 16.C 17.B 18.D 19.C 20.A 二、填空题 1.线性 2.n-i+1 3.相邻 4.前移,前,后 5.物理存储位置,链域的指针值 6.前趋,后继 7.顺序,链接 8.一定,不一定 9.线性,任何,栈顶,队尾,队头 10.单链表,双链表,非循环链表,循环链表 11.使空表和非空表统一;算法处理一致 12.O(1),O(n) 13.栈满,栈空,m,栈底,两个栈的栈顶在栈空间的某一位置相遇 14.2、3 15.O(1) 三、简答题 1.头指针是指向链表中第一个结点(即表头结点)的指针;在表头结点之前附设的结点称为头结点;表头结点为链表中存储线性表中第一个数据元素的结点。若链表中附设头结点,则不管线性表是否为空表,头指针均不为空,否则表示空表的链表的头指针为空。 2.线性表具有两种存储结构即顺序存储结构和链接存储结构。线性表的顺序存储结构可以直接存取数据元素,方便灵活、效率高,但插入、删除操作时将会引起元素的大量移动,因而降低效率:而在链接存储结构中内存采用动态分配,利用率高,但需增设指示结点之间关系的指针域,存取数据元素不如顺序存储方便,但结点的插入、删除操作较简单。 3.应选用链接存储结构,因为链式存储结构是用一组任意的存储单元依次存储线性表中的各元素,这里存储单元可以是连续的,也可以是不连续的:这种存储结构对于元素的删除或插入运算是不需要移动元素的,只需修改指针即可,所以很容易实现表的容量的扩充。 4.应选用顺序存储结构,因为每个数据元素的存储位置和线性表的起始位置相差一个

第 5 章 数组和广义表答案

第 5 章数组和广义表 一、选择 1.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存 储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则 a85的地址为( B )。 A. 13 B. 33 C. 18 D. 40 2. 设有数组A[i,j],数组的每个元素长度为3字节,i的值为1 到 8 ,j的值为1 到10,数组从内存首地址BA开始顺序存放,当用以 列为主存放时,元素A[5,8]的存储首地址为(B )。 A. BA+141 B. BA+180 C. BA+222 D. BA+225 3. 假设以行序为主序存储二维数组A=array[1..100,1..100],设 每个数据元素占2个存储单元,基地址为10,则LOC[5,5]=( B )。 A. 808 B. 818 C. 1010 D. 1020 4. 二维数组A的元素都是6个字符组成的串,行下标i的范围从0 到8,列下标j的范围从0到9。从供选择的答案中选出应填入下列 关于数组存储叙述中()内的正确答案。 (1)存放A至少需要( E )个字节; (2)A的第8列和第5行共占( A )个字节; (3)若A按行存放,元素A[8,5]的起始地址与A按列存放时的元 素( B )的起始地址一致。 供选择的答案: (1)A. 90 B. 180 C. 240 D. 270 E. 540

(2)A. 108 B. 114 C. 54 D. 60 E. 150 (3)A. A[8,5] B. A[4,9] C. A[5,8] D. A[0,9] 5. 若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括 主对角线上所有元素)依次存放于一维数组B[1..(n(n+1))/2]中, 则在B中确定aij(i

数据结构(C语言版)第5章 数组和广义表

第 5 章数组和广义表 一、选择题 为第一元素,其 1.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a 11 的地址为()。【燕山大学 2001 一、2 存储地址为1,每个元素占一个地址空间,则a 85 (2分)】 A. 13 B. 33 C. 18 D. 40 2. 有一个二维数组A[1:6,0:7] 每个数组元素用相邻的6个字节存储,存储器按字节编址, 那么这个数组的体积是(①)个字节。假设存储数组元素A[1,0]的第一个字节的地址是0, 则存储数组A的最后一个元素的第一个字节的地址是(②)。若按行存储,则A[2,4]的第 一个字节的地址是(③)。若按列存储,则A[5,7]的第一个字节的地址是(④)。就一般情 况而言,当(⑤)时,按行存储的A[I,J]地址与按列存储的A[J,I]地址相等。供选择的 答案:【上海海运学院 1998 二、2 (5分)】 ①-④: A.12 B. 66 C. 72 D. 96 E. 114 F. 120 G. 156 H. 234 I. 276 J. 282 K. 283 L. 288 ⑤: A.行与列的上界相同 B. 行与列的下界相同 C. 行与列的上、下界都相同 D. 行的元素个数与列的元素个数相同 3. 设有数组A[i,j],数组的每个元素长度为3字节,i的值为1 到8 ,j的值为1 到10, 数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为( )。 A. BA+141 B. BA+180 C. BA+222 D. BA+225 【南京理工大学 1997 一、8 (2分)】 4. 假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存 储单元,基地址为10,则LOC[5,5]=()。【福州大学 1998 一、10 (2分)】 A. 808 B. 818 C. 1010 D. 1020 5. 数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000 的内存单元中,则元素A[5,5]的地址是( )。【南京理工大学 2001 一、13 (1.5分)】 A. 1175 B. 1180 C. 1205 D. 1210 6. 有一个二维数组A[0:8,1:5],每个数组元素用相邻的4个字节存储,存储器按字节编址, 假设存储数组元素A[0,1]的第一个字节的地址是0,存储数组A的最后一个元素的第一个字 节的地址是(①)。若按行存储,则A[3,5]和 A[5,3]的第一个字节的地址是(②) 和(③)。若按列存储,则A[7,1]和A[2,4]的第一个字节的地址是(④)和(⑤)。【上海海运学院 1996 二、1 (5分)】 ①-⑤:A.28 B.44 C.76 D.92 E.108 F.116 G.132 H.176 I.184 J.188 7. 将一个A[1..100,1..100]的三对角矩阵,按行优先存入一维数组B[1‥298]中,A中元 (即该元素下标i=66,j=65),在B数组中的位置K为()。供选择的答案: 素A 6665 A. 198 B. 195 C. 197 【北京邮电大学 1998 二、5 (2分)】 8. 二维数组A的元素都是6个字符组成的串,行下标i的范围从0到8,列下标j的范圈 从1到10。从供选择的答案中选出应填入下列关于数组存储叙述中()内的正确答案。(1)存放A至少需要()个字节; (2)A的第8列和第5行共占()个字节; (3)若A按行存放,元素A[8,5]的起始地址与A按列存放时的元素()的起始地

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

第5章 数组和广义表 自测题含答案 一、单选题 1. 假设有二维数组A 6×8,每个元素用相邻的6个字节存储,存储器按字节编址。已知A 的起始存储位置(基地址)为1000,则数组A 的体积(存储量)为 288 B ;末尾元素A 57的第一个字节地址为 1282 ;若按行存储时,元素A 14的第一个字节地址为 (8+4)×6+1000=1072 ;若按列存储时,元素A 47的第一个字节地址为 (6×7+4)×6+1000)=1276 。 2. 〖00年计算机系考研题〗设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为 8950 。 答:不考虑0行0列,利用列优先公式: LOC(a ij )=LOC(a c 1, c 2)+[(j-c 2)*( d 1-c 1+1)+i-c 1)]*L 得:LOC(a 32,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 ]中,对下三角部分中任一元素a i,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 ??????????????=n n n n a a a a a a A ,2 ,1,2 ,21,21 ,1

第五章 数组和广义表

第5章数组和广义表习题 一、选择题 1.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为(B)。 i×(i-1)/2+j-1~~~~(i>=j) 8×7÷2+5=33因为a11从1开始所以要加1 A. 13 B. 33 C. 18 D. 40 2. 数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000的内存单元中,则元素A[5,5]的地址是( A)。 所求=a+(j*n+j)*l A. 1175 B. 1180 C. 1205 D. 1210 3. 若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[1..(n(n+1))/2]中,则在B中确定aij(i

数组和广义表习题

习题五数组 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均以三元组顺序表作为存储结构。试写出满足以下条件的矩阵相加

数据库系统l试题库及答案 第5章数组和广义表

第5章 数组和广义表 5.1数组 一、填空题 1. 假设有二维数组A 6×8,每个元素用相邻的6个字节存储,存储器按字节编址。已知A 的起始存储位置 (基地址)为1000,则数组A 的体积(存储量)为 ;末尾元素A 57的第一个字节地址为 。 2. 三元组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素 的 、 和 。 3. 设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则 元素a[32,58]的存储地址为 。 4. 设n 行n 列的下三角矩阵A 已压缩到一维数组B[1..n*(n+1)/2]中,若按行为主序存储,则A[i,j] 对应的B 中存储位置为 。 5. 设有一个10阶对称矩阵A 采用压缩存储方式(以行为主序存储:a 11=1),则a 85 的地址为 。 6. 设下三角矩阵A 如果按行序为主序将下三角元素A i j (i ≤j)存储在一个一维数组B[1..n(n+1)/2]中, 对任一个三角矩阵元素A ij ,它在数组B 中的下标为 。 二、选择题 1. ( )假设有60行70列的二维数组a[1…60, 1…70]以列序为主序顺序存储,其基地址为10000, 每个元素占2个存储单元,那么第32行第58列的元素a[32,58]的存储地址为 。 A .16902 B .16904 C .14454 D .答案A, B, C 均不对 2. ( )对特殊矩阵采用压缩存储的目的主要是为了 。 A .表达变得简单 B .对矩阵元素的存取变得简单 C .去掉矩阵中多余元素 D .减少不必要的存储空间 3. ( )对于n 阶对称矩阵,如果以行序或列序放入内存中,则需要 个存储单元。 A .n(n+1)/2 B .n(n-1)/2 C . n 2 D .n 2 /2 4. 有一个100*90的稀疏矩阵,非0元素有10个,设每个整型数占2字节,则用三元组表示该矩阵时, 所需的字节数是 。 A. 60 B. 66 C. 18000 D. 33 5. 对稀疏矩阵进行压缩存储目的是( )。 A .便于进行矩阵运算 B .便于输入和输出 C .节省存储空间 D .降低运算的时间复杂度 6. ( )设矩阵A 是一个对称矩阵,为了节省存储,将其下三角部分(如下图所示)按行序存放在一 维数组B[1, n(n-1)/2 ]中,对下三角部分中任一元素a i,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 三、判断题: 1.( )一个稀疏矩阵Am*n 采用三元组形式表示,若把三元组中有关行下标与列下标的值互换,并把 ?????? ? ???????=n n n n a a a a a a A ,2,1 ,2,21,21,1Λ Λ

数组广义表答案及二叉树习题及答案

栈、队列、串、数组和广义表习题 一、选择题 1 一个栈的输入序列为1 2 3 4 5,则下列序列中不可能是栈的输出序列的是( B )。 A. 2 3 4 1 5 B. 5 4 1 3 2 C. 2 3 1 4 5 D. 1 5 4 3 2 2若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,p N,若p N是n,则p i是( D )。 A. i B. n-i C. n-i+1 D. 不确定 3 若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?( B ) A. 1和 5 B. 2和4 C. 4和2 D. 5和1 4 设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,一个元素出栈后即进队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1则栈S的容量至少应该是( C )。 A. 6 B. 4 C. 3 D. 2 5 设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为( C ) A.求子串 B.联接 C.匹配 D.求串长 6 设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为( B )。 A. 13 B. 33 C. 18 D. 40 7 已知广义表LS=((a,b,c),(d,e,f)),运用head和tail函数取出LS中原子e的运算是( C )。 A. head(tail(LS)) B. tail(head(LS)) C. head(tail(head(tail(LS))) D. head(tail(tail(head(LS)))) 8 模式串t=‘abcaabbcabcaabdab’,该模式串的next数组的值为( D ),nextval数组的值为( F )。 A.0 1 1 1 2 2 1 1 1 2 3 4 5 6 7 1 2 B.0 1 1 1 2 1 2 1 1 2 3 4 5 6 1 1 2 C.0 1 1 1 0 0 1 3 1 0 1 1 0 0 7 0 1 D.0 1 1 1 2 2 3 1 1 2 3 4 5 6 7 1 2 E.0 1 1 0 0 1 1 1 0 1 1 0 0 1 7 0 1 F.0 1 1 0 2 1 3 1 0 1 1 0 2 1 7 0 1 二、填空题 1 在作进栈运算时应先判别栈是否_(1)满_;在作退栈运算时应先判别栈是否_(2)空_;当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为_(3)n_。 2 设循环队列存放在向量sq.data[0:M]中,则队头指针sq.front在循环意义下的出队操作可表示为__return(sq.data(sq.front));sq.front=(sq.front+1)%(M+1);_____,若用牺牲一个单元的办法来区分队满和队空(设队尾指针sq.rear),则队满的条件为_(sq.rear+1)%(M+1)==sq.front;_。 3 串是一种特殊的线性表,其特殊性表现在__(1) 其数据元素都是字符__;串的两种最基本的存储方式是__(2) 顺序存储__、__(3) 和链式存储__;两个串相等的充分必要条件

第5章 数组和广义表答案

第五章答案 5.2设有三对角矩阵A n×n,将其三条对角线上的元素逐行的存于数组B[1..3n-2]中,使得 B[k]=a ij,求:(1)用i,j表示k的下标变换公式;(2)用k表示i、j的下标变换公式。【解答】(1)k=2(i-1)+j (2) i=[k/3]+1, j=[k/3]+k%3 ([ ]取整,%取余) 5.4在稀疏矩阵的快速转置算法5.2中,将计算position[col]的方法稍加改动,使算法只占用一个辅助向量空间。 【解答】算法(一) FastTransposeTSMatrix(TSMartrix A, TSMatrix *B) {/*把矩阵A转置到B所指向的矩阵中去,矩阵用三元组表表示*/ int col,t,p,q; int position[MAXSIZE]; B->len=A.len; B->n=A.m; B->m=A.n; if(B->len>0) { position[1]=1; for(t=1;t<=A.len;t++) position[A.data[t].col+1]++; /*position[col]存放第col-1列非零元素的个数, 即利用pos[col]来记录第col-1列中非零元素的个数*/ /*求col列中第一个非零元素在B.data[ ]的位置,存放在position[col]中*/ for(col=2;col<=A.n;col++) position[col]=position[col]+position[col-1]; for(p=1;pdata[q].row=A.data[p].col; B->data[q].col=A.data[p].row; B->data[q].e=A.data[p].e; Position[col]++; } } } 算法(二) FastTransposeTSMatrix(TSMartrix A, TSMatrix *B) { int col,t,p,q; int position[MAXSIZE]; B->len=A.len; B->n=A.m; B->m=A.n; if(B->len>0) { for(col=1;col<=A.n;col++) position[col]=0; for(t=1;t<=A.len;t++) position[A.data[t].col]++; /*计算每一列的非零元素的个数*/ /*从最后一列起求每一列中第一个非零元素在B.data[]中的位置,存放在position[col]中*/ for(col=A.n,t=A.len;col>0;col--) { t=t-position[col]; position[col]=t+1; } for(p=1;p

数据结构练习题-数组和广义表

已知二维数组A[3][5],其每个元素占3个存储单元,并且A[0][0]的存储地址为1200。 求元素A[1][3]的存储地址(分别对以行序和列序为主序存储进行讨论),该数组共占用多少个存储单元? 【解答】按照以行序为主序存储公式: LOC(i,j)=LOC(c1,c2)+[(i-c1)*(d2-c2+1)+(j-c2)]*L 在C语言中有:LOC(i,j)=LOC(0,0)+(i*(d2+1)+j)*L 则: LOC(A[1][3])=1200+(1*5+3)*3=1224 (按行序存储) LOC(A[1][3])=1200+(3*3+1)*3=1230 (按列序存储) 有一个10阶的对称矩阵A,采用压缩存储方式以行序为主序存储,A[1][1]为第一元素,其存储地址为1,每个元素占一个地址空间,求A[7][5]和A[5][6]的地址。 【解答】按照公式: LOC(A[7][5])=7(7-1)/2+5 = 26 LOC(A[5][6])=LOC(A[6][5])=6(6-1)/2+5=20 设有一个二维数组A[m][n],设A[0][0]存放位置在644,A[2][2]存放位置在676,每个元素占一个空间,问A[3][3]存放在什么位置? 因为A[0][0]存放位置在644,A[2][2]存放位置在676,每个元素占一个空间,说明一行有15个元素(算法:(676-2-644)/2)。A[3][3]存放位置是692。 二维数组A[9][10]的元素都是6个字符组成的串,请回答下列问题: (1)存放A至少需要( )个字节; (2)A的第7列和第4行共占( )个字节; (3)若A按行存放,元素A[7][4]的起始地址与A按列存放时哪一个元素的起始地址一致。 【解答】按照题5.1给出的公式: (1)存放A需要9*10*6=540个字节 (2)A的第7列和第行共占(9+10-1)*6=108个字节(3) LOC(A[7][4])= LOC(A[0][0])+[7*10+4]*L (按行序存储) LOC(A[i][j])= LOC(A[0][0])+[j*9+i]*L (按列序存储,0<=i<=8,0<=j<=9)所以,i=2,j=8。 即元素A[7][4]的起始地址与A按列存放时A[2][8]的起始地址一致。 什么是广义表?请简述广义表和线性表的主要区别。 【解答】广义表是零至多个元素的有限序列,广义表中的元素可以是原子,也可以是子表。 从“元素的有限序列”角度看,广义表满足线性结构的特性:在非空线性结构中,只有一个 称为“第一个”的元素,只有一个称为“最后一个”的元素,第一元素有后继而没有前驱, 最后一个元素有前驱而没有后继,其余每个元素有唯一前驱和唯一后继。从这个意义上说, 广义表属于线性结构。当广义表中的元素都是原子时,广义表就蜕变为线性表。 求广义表D=(a,(b,(),c),((d),e))的长度和深度。 【解答】3和3

数据结构数组和广义表自测题(附答案)

第4~5章串和数组 一、填空题 1. 不包含任何字符(长度为0)的串称为空串;由一个或多个空格(仅由空格符)组成的串称为空白串。 2. 设S=“A;/document/Mary.doc”,则strlen(s)= 20, “/”的字符定位的位置为3。 4. 子串的定位运算称为串的模式匹配;被匹配的主串称为目标串,子串称为模式。 5. 设目标T=”abccdcdccbaa”,模式P=“cdcc”,则第6次匹配成功。 6. 若n为主串长,m为子串长,则串的古典(朴素)匹配算法最坏的情况下需要比较字符的总次数为 (n-m+1)*m。 7. 假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址。已知A的起始存储位置(基 1282;若按行地址)为1000,则数组A的体积(存储量)为288 B ;末尾元素A 57的第一个字节地址为 (8+4)×6+1000=1072;若按列存储时,元素A47的第一个字节地址存储时,元素A 14的第一个字节地址为 为(6×7+4)×6+1000)=1276。(注:数组是从0行0列还是从1行1列计算起呢?由末单元为A 57可知,是从0行0列开始!) 8.设数组a[1?60, 1?70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素 a[32,58]的存储地址为8950。答:不考虑0行0列,利用列优先公式: LOC(a ij)=LOC(a c1, c2)+[(j-c2)*(d1-c1+1)+i-c1)]*L得:LOC(a32,58)=2048+[(58-1)*(60-1+1)+32-1]]*2=8950 9. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素 的行下标、列下标和元素值。 10.求下列广义表操作的结果: (1)GetHead【((a,b),(c,d))】=== (a, b) ; //头元素不必加括号 (2)GetHead【GetTail【((a,b),(c,d))】】=== (c,d) ;

第五章数组和广义表

第五章数组与广义表 一.选择题 1.下面的说法不正确的是____________。 A.数组是一种线性结构B.数组是一种定长的线性表结构 C.除了插入与删除操作外,数组的基本操作还有存取、修改、检索和 排序等 D.数组的基本操作有存取、修改、检索和排序等,没有插入和删除操 作 分析:数组的主要操作是存取、修改、检索和排序。数组没有插入和修改 错误。答案应选择C。 2.一维数组A 采用顺序存储结构,每个元素占用6 个字节,第6 个元素的起始地址为100,则该数组的首地址是 。 A.64 B.28 C.70 D.90 分析:设数组元素的首地址为x,则存在关系x+5*6=100,因此x 为70,答案应选择C。 3.稀疏矩阵采用压缩存储的目的主要是______________ 。 A.表达变得简单B.对矩阵元素的存取变得简单 C.去掉矩阵中的多余元素D.减少不必要的存储空间的开销 分析:答案应选择D。 4.若对n 阶对称矩阵A 以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[1..(n(n+1))/2]中,则在B 中确 定aij(i

中南大学数据结构与算法第5章数组和广义表课后作业答案

第5章数组与广义表习题练习答案 5.1请按行及按列优先顺序列出四维数组A2*3*2*3的所有元素在内存中的存储次序,开始结点为a0000。 解: 按行优先的顺序排列时,先变化右边的下标,也就是右到左依次变化,这个四维数组的排列是这样的:(将这个排列分行写出以便与阅读,只要按从左到右的顺序存放就是在内存中的排列位置) a0000a0001a0002 a0010a0011a0012 a0100a0101a0102 a0110a0111a0112 a0200a0201a0202 a0210a0211a0212 a1000a1001a1002 a1010a1011a1012 a1100a1101a1102 a1110a1111a1112 a1200a1201a1202 a1210a1211a1212 按列优先的顺序排列恰恰相反,变化最快的是左边的下标,然后向右变化,所以这个四维数组的排列将是这样的,(这里为了便于阅读,也将其书写为分行形式): a0000a1000 a0100a1100 a0200a1200 a0010a1010 a0110a1110 a0210a1210 a0001a1001 a0101a1101

a0201a1201 a0011a1011 a0111a1111 a0211a1211 a0002a1002 a0102a1102 a0202a1202 a0012a1012 a0112a1112 a0212a0212 5.2 给出C语言的三维数组地址计算公式。 解: 因为C语言的数组下标下界是0,所以 Loc(A mnp)=Loc(A000)+((i*n*p)+k)*d 其中Amnp表示三维数组。Loc(A000)表示数组起始位置。i、j、k表示当前元素的下标,d表示每个元素所占单元数。 5.3设有三对角矩阵A n*n,将其三条对角线上的元素逐行地存储到向量B[0...3n-3]中,使得B[k]=a ij,求: (1)用i , j 表示k的下标变换公式。 (2)用k 表示i,j 的下标变换公式。 (1) 解: 要求i,j 到k 的下标变换公式,就是要知道在k之前已有几个非零元素,这些非零元素的个数就是k 的值,一个元素所在行为i,所在列为j,则在其前面已有的非零元素个数为: (i*3-1)+j-(i+1) 其中(i*3-1)是这个元素前面所有行的非零元素个数,j-(i+1)是它所在列前面的非零元素个数 化简可得: k=2i+j; // c下标是从0开始的。

相关主题
文本预览
相关文档 最新文档