数据结构习题库1-8章测试题 章节练习带答案

数据结构习题库1-8章测试题 章节练习带答案
数据结构习题库1-8章测试题 章节练习带答案

第一章绪论

一.填空题

1.数据结构是一门研究非数值计算的程序设计问题中计算机的_____________ 以及它们之间的_________ 和操作等的学科。

2.数据结构包括数据的_____________ 结构、_____________ 结构和运算。

3.数据的物理结构被分为_________、________、__________和___________四种。

4.数据的逻辑结构是指数据元素之间的逻辑关系,根据数据元素之间关系的不同特性,逻辑结构通常有_______________ ,________________ ,________________ 和

__________________四类基本结构。

5.一种抽象数据类型包括 ____________和_____________ 两个部分。

6.数据结构是指数据及其相互之间的______________。当结点之间存在M 对N(M:N)的联系时,称这种结构为____________当结点之间存在1 对N(1:N)的联系时,称这种结构为____________。

7.数据结构被形式地定义为(D, R),其中D是___________ 的有限集合,R是D上的有限集合。

8. 数据的基本单位是________,它在计算机中是作为一个整体来处理的。

9.算法的特性有________,___________ ,____________ ,_______________ 和__________ 等五种特性。

10.通常从四个方面评价算法的质量:_________、_________、_________和_________。

11.算法的时间复杂度为(n3+n2log2n+14n)/n2,其数量级表示为________。

12.算法的效率可分为______________ 效率和__________________ 效率。

13.算法的时间复杂度为(3n3+2000n log2n+90)/n2,其数量级表示为________。

14.下面程序段的时间复杂度为____________。

for(int i=0; i

for(int j=0; j

a[i][j]=i*j;

15.for(i=1,t=1,s=0;i<=n;i++) {t=t*i;s=s+t;}的时间复杂度为_________。16.对算法从时间和空间两方面进行度量,分别称为_____和_______ 分析。

二.选择题

1.计算机识别、存储和加工处理的对象被统称为_________。

A、数据

B、数据元素

C、数据结构

D、数据类型

2.数据结构通常是研究数据的__________及它们之间的联系。

A、存储和逻辑结构

B、存储和抽象

C、理想和抽象

D、理想与逻辑

3.在数据结构中,从逻辑上可以把数据结构分成__________。

A、动态结构和静态结构

B、紧凑结构和非紧凑结构

C、线性结构和非线性结构

D、内部结构和非内部结构

4.不是数据的逻辑结构是__________。

A、散列结构

B、线性结构

C、树结构

D、图结构

5.不是数据的存储结构是__________。

A、散列结构

B、顺序结构

C、链接结构

D、线性结构

6.同一记录结构中的各数据项的类型__________一致。

A、必须

B、不必

C、不能

D、不可能

8.组成数据的基本单位是__________。

A、数据项

B、数据类型

C、数据元素

D、数据变量

9.设数据结构A=(D,R),其中D={1,2,3,4},R={r} ,r={<1 ,2> ,<2 ,3>,<3 ,4> ,

<4 ,1>},则数据结构 A是__________。

A、线性结构

B、树型结构

C、图型结构

D、集合

10.设某数据结构的二元组形式表示为 A=(D ,R),D={01 ,02,03,04,05,06,07,08,09},R={r} ,r={<01 ,02>,<01,03>,<01 ,04>,<02 ,05>,<02 ,06>,<03 ,07>,

<03 ,08>,<03,09>},则数据结构 A是__________。

A、线性结构

B、树型结构

C、物理结构

D、图型结构

11.对一个算法的评价,不包括如下__________方面的内容。

A、健壮性和可读性

B、并行性

C、正确性

D、时空复杂度

12.算法的五个重要特性是________?

A、可执行性、可移植性、可扩充性、输入和输出。

B、可行性、确定性、有穷性、输入和输出。

C、确定性、有穷性、稳定性、输入和输出。

D、可执行性、可移植性、可扩充性、输入和输出。

13.算法分析的两个方面是________。

A、空间复杂性和时间复杂性

B、正确性和简明性

C、可读性和文档性

D、数据复杂性和程序复杂性

14. 算法分析的目的是__________?

A、找出数据结构的合理性

B、研究算法中的输入和输出的关系

C、分析算法的效率以求改进

D、分析算法的易懂性和文档性

15. 以下算法的空间复杂度是__________。

#include

#define n 10

cout(int A[])

{

int B[n],i;

for(i=0;i

B[n-i-1]=A[i];

for(i=0;i

printf("%d",B[i]);

}

A、O(1)

B、O(n)

C、O(log2n)

D、O(n*n)

16.下面程序的时间复杂为__________。

for(i=1,s=0; i<=n ; i++ )

{

t=1 ;

for(j=1;j<=i;j++)

t=t*j ;

s=s+t;

}

A、O(n)

B、O(n2)

C、O(n3)

D、O(n4)

17.一个算法的时间复杂度为(9n2+2nlog n+2)/(5n),其数量级表示为________。

A、O(1)

B、O(n2)

C、O(log2n)

D、O(n)

18.阅读以下的程序段,它的时间复杂度为__________。

for(i=1;i<=m;++i)

for(j =1;j<=n;++j)

c[i][j]=0;

A、O(n)

B、O(m+2n)

C、O(m+n)

D、O(m*n)

19.程序段 s=i=0;do {i=i+1 ; s=s+i ;}while(i<=n);的时间复杂度为()。

A、O(n)

B、O(nlog2n)

C、O(n2 )

D、O(n/2)

20.下列程序段的时间复杂度为__________。

for(i=0 ; i

for(i=0 ; i

c[i][j]=c[i][j]+a[i][k]*b[k][j] ;

A、 O(m*n*t)

B、O(m+n+t)

C、O(m+n*t)

D、O(m*t+n)

21. 在数据结构中,与所使用的计算机无关的是数据的__________结构。

A、逻辑

B、存储

C、逻辑和存储

D、物理

22. 数据结构在计算机中的表示是指__________?

A、数据的逻辑结构

B、数据结构

C、数据的存储结构

D、数据元素之间的关系

23. 下面__________的时间复杂性最好,即执行时间最短。

A、O(n)

B、O(log2n)

C、O(nlog2n)

D、O(n2)

三、判断题

1. 程序越短,程序运行的时间就越少。

2. 数据结构包括数据间的逻辑结构、数据的存储方式和数据的运算三个方面。

四、简答题

1.数据的逻辑结构有哪几种?常用的存储有哪几种?

2.举一个数据结构的例子,叙述其逻辑结构、存储结构和运算三方面的内容。

3.什么叫算法?它有哪些特性?

4.有下列几种用二元组表示的数据结构,画出它们分别对应的逻辑结构图,并指出它们分别以属于何种结构。

(1)A=(K,R),其中

K={a,b,c,d,e,f,g,h}

R={r}

r={,,,,,,}

(2) B=(K,R),其中

K={a,b,c,d,e,f,g,h}

R={r}

r={,,,,,,}

(3) B=(K,R),其中

K={1,2,3,4,5,6}

R={r}

r={(1,2),(2,3),(2,4),(3,4),(3,5),(3,6),(4,5),(4,6)}

5.简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。

解:数据是对客观事物的符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。

数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。

数据对象是性质相同的数据元素的集合,是数据的一个子集。

数据结构是相互之间存在一种或多种特定关系的数据元素的集合。

存储结构是数据结构在计算机中的表示。

数据类型是一个值的集合和定义在这个值集上的一组操作的总称。

抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。是对一般数据类型的扩展。

6. 试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。

解:抽象数据类型包含一般数据类型的概念,但含义比一般数据类型更广、更抽象。一般数据类型由具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。抽象数据类型通常由编程者定义,包括定义它所使用的数据和在这些数据上所进行的操作。在定义抽象数据类型中的数据部分和操作部分时,要求只定义到数据的逻辑结构和操作说明,不考虑数据的存储结构和操作的具体实现,这样抽象层次更高,更能为其他用户提供良好的使用接口。

7. 设有数据结构(D,R),其中

{}4,3,2,1d d d d D =,{}r R =,()()(){}4,3,3,2,2,1d d d d d d r =

试按图论中图的画法惯例画出其逻辑结构图。

解:

8.设n 为正整数。试确定下列各程序段中前置以记号@的语句的频度:

(1) i=1; k=0;

while(i<=n-1){

@ k += 10*i;

i++;

}

(2) i=1; k=0;

do {

@ k += 10*i;

i++;

} while(i<=n-1);

(3) i=1; k=0;

while (i<=n-1) {

i++;

@ k += 10*i;

}

(4) k=0;

for(i=1; i<=n; i++) {

for(j=i; j<=n; j++)

@ k++;

}

(5) for(i=1; i<=n; i++) {

for(j=1; j<=i; j++) {

for(k=1; k<=j; k++)

@ x += delta;

}

(6) i=1; j=0;

while(i+j<=n) {

@ if(i>j) j++;

else i++;

}

(7) x=n; y=0; // n 是不小于1的常数

while(x>=(y+1)*(y+1)) {

@ y++;

}

(8) x=91; y=100;

while(y>0) {

@ if(x>100) { x -= 10; y--; }

else x++;

}

解:(1) n-1

(2) n-1

(3) n-1 (4) n+(n-1)+(n-2)+...+1=2

)1(+n n (5) 1+(1+2)+(1+2+3)+...+(1+2+3+...+n)=∑=+n i i i 12

)1( =∑∑∑∑====+=+=+n

i n i n i n i i i i i i i 1

121212121)(21)1(21 =)32)(1(12

1)1(41)12)(1(121++=++++n n n n n n n n (6) n (7) ??n 向下取整

(8) 1100

五、程序算法题

1.设n 为整数,求下列各程序段的时间复杂度

(1)i=1;k=2;

While(i

k=k+10*I;

i=i+1;

}

(2)i=1;j=0;

While(i+j<=n)

If(i>j)j=j+1;

Else i=i+1;

(3)x=91;y=100

While(y>0)

If(x>100){

x=x-10;

y=y-1;

}else x=x+1;

2. 试写一算法,自大至小依次输出顺序读入的三个整数X,Y和Z的值

解:

int max3(int x,int y,int z)

{

if(x>y)

if(x>z) return x;

else return z;

else

if(y>z) return y;

else return z;

}

第八章查找

一.选择题

1.对长度为n 的无序线性表进行顺序查找,则查找成功、不成功时的平均数据比较次数分别为_______。

A.n/2,n

B.(n+1)/2,n-1

C.(n+1)/2,n

D.(n-1)/2,n-1

2.设有一个文件有200 个记录,按分块查找法查找记录,如分成10 块,每块20 个记录,用二分查找法查索引表,用顺序查找法查块内记录,则平均查找长度为________。

A.8.4 B.10.5 C.13.4 D.16

3. 请指出在顺序表{2、5、7、10、14、15、18、23、35、41、52}中,用二分法查找关键码12 需做________次关键码比较。

A. 2

B. 3

C. 4

D. 5

4.一个有序表为{1,3,9,12,41,50,59,75,77,82,95,100},利用折半查找查找关键字为82 的结点时________次比较后查找成功。

A. 1

B. 2

C. 4

D. 8

5. 设有序顺序表中有n 个数据元素,则利用二分查找法查找数据元素X 的最多比较次数不超过________。

A.log

2n+1 B.log

2

n-1 C.log

2

n D.log

2

(n+1)

6. 设有序表中有1000 个元素,则用二分查找查找元素X 最多需要比较____次。A.25 B.10 C.7 D.1

7. 折半查找要求查找表中各元素的关键字值必须是___________排列。

A.递增或递减 B.递增 C.递减 D.无序

8. 对线性表进行折半查找时,必须要求线性表________。

A.以顺序方式存储 B.以链接方式存储

C.以顺序方式存储,且结点按关键字有序排列

D.以链接方式存储,且结点按关键字有序排列

9.顺序查找法适合于存储结构为________的线性表。

A.散列存储 B.顺序存储或链接存储

C.压缩存储 D.索引存储

10.采用顺序搜索方法查找长度为n 的顺序表时,搜索成功的平均搜索长度为________。

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

11. 在二叉排序树中插入一个关键字值的平均时间复杂度为________。

A.O(n) B.O(1og

2n) C.O(nlog

2

n) D.O(n2)

12.依次插入序列(50,72,43,85,75,20,35,45,65,30)后建立的二叉搜索树中,查找元素35 要进行_____元素间的比较。

A.4 次

B.5 次

C.7 次

D.10 次

13. 二叉排序树中左子树上所有结点的值均________根结点的值。

A.< B.> C.= D.!=

14. 对于一组结点,从空树开始,把它们插入到二叉排序树中,就建立了一棵二叉排序树。这时,整个二叉排序树的形状取决于________。

A.结点的输入顺序 B.结点的存储结构

C. 结点的取值范围 D.计算机的硬件

15.设有一组初始记录关键字序列为(34,76,45,18,26,54,92),则由这组记录关键字生成的二叉排序树的深度为________。

A.4 B.5 C.6 D.7

16. 在一个空AVL 树内,依次插入关键字:49, 94, 91, 47, 92, 45, 89, 42, 87,当删除关键码时,如果该关键码同时具有左右子女,则以其中序后继替代,则删除关键码91 时的旋转类型是__________。

A.左单旋

B.左右双旋

C.右单旋

D.其它情况

17. 在一棵m 阶B-树中,若在某叶子结点中插入一个新关键字而引起该结点分裂,则此结点中原有的关键字的个数是_______。

A. m

B.m - 1

C.m / 2

D.m /2- 1

18.对包含n个元素的散列表进行查找,平均查找长度________。

A.O(log

2

n) B.O(n) C.不直接依赖于n D.上述三者都不是

19. 设散列表中有m 个存储单元,散列函数H(key)= key % p,则p 最好选择________。

A.小于等于m 的最大奇数 B.小于等于m 的最大素数

C.小于等于m 的最大偶数 D.小于等于m 的最大合数

20.设某散列表的长度为100,散列函数H(k)=k % P,则P 通常情况下最好选择________。

A.99 B.97 C.91 D.93

21. 设有n 个关键字具有相同的Hash 函数值,则用线性探测法把这n 个关键字映射到HASH表中需要做________次线性探测。

A.n2 B.n(n+1) C.n(n+1)/2 D.n(n-1)/2

22. 采用开放定址法处理散列表的冲突时,其平均查找长度________。

A.低于链接法处理冲突 B. 高于链接法处理冲突

C.与链接法处理冲突相同 D.高于二分查找

23. 散列法存储的基本思想是根据 A 来决定 B ,碰撞(冲突)指的是 C ,处理碰撞的两类主要方法是 D 。

供选择的答案:

A,B:①存储地址② 元素的符号③ 元素个数④ 关键码值

⑤ 非码属性⑥ 平均检索长度⑦ 负载因子⑧ 散列表空间

C: ①两个元素具有相同序号② 两个元素的关键码值不同,而非码属性相同

③ 不同关键码值对应到相同的存储地址④ 负载因子过大⑤ 数据元素过多D:① 线性探查法和双散列函数法② 建溢出区法和不建溢出区法

③ 除余法和折叠法④ 拉链法和开地址法

24. _____是HASH 查找的冲突处理方法。

A.求余法 B.平方取中法 C.二分法 D.开放地址法

25. 当α的值较小时,散列存储通常比其他存储方式具有________的查找速度。

A. 较慢

B. 较快

C. 相同

26.当在一个有序的顺序存储表上查找一个数据时,既可用折半查找,也可用顺序查找,但前者比后者的查找速度________。

A.必定快 B.不一定

C.在大部分情况下要快 D.取决于表递增还是递减

27. 当采用分块查找时,数据的组织方式为________。

A.数据分成若干块,每块内数据有序

B.数据分成若干块,每块内数据不必有序,但块间必须有序

C.数据分成若干块,每块内数据有序,每块内最大(或最小)的数据组成索引块

D.数据分成若干块,每块(除最后一块外)中数据个数需相同

28.对二叉排序树进行_________遍历,可以得到该二叉树所有结点构成的有序序列。

A.前序B.中序C.后序D.按层次29.一个哈希函数被认为是“好的”,如果它满足条件_________。

A.哈希地址分布均匀

B.保证不产生冲突

C.所有哈希地址在表长范围内

D.满足B和C

30.哈希表的平均查找长度是__________的函数。

A.哈希表的长度 B.表中元素的多少

C.哈希函数 D.哈希表的装满程度

31.平均查找长度最短的查找方法是____________。

A.折半查找 B.顺序查找 C.哈希查找 D.其他

二.判断题

1. 先序遍历一棵二叉排序树得到的结点序列不一定是有序的序列。()

2. 中序遍历一棵二叉排序树可以得到一个有序的序列。()

3. 向二叉排序树中插入一个结点需要比较的次数可能大于该二叉树的高度。()

4. 分块查找的平均查找长度不仅与索引表的长度有关,而且与块的长度有关。

()

5. 分块查找的基本思想是首先在索引表中进行查找,以便确定给定的关键字可能存在的块号,然后再在相应的块内进行顺序查找。()

6. 在散列存储中,装填因子α越小,则发生冲突的可能性也越小。()

7. 如果两个关键字的值不等但哈希函数值相等,则称这两个关键字为同义词。

()

8.在有序表的查询过程中,设立“哨兵”的作用是为了提高效率。()

9.对于折半查找,其前提条件是待查找序列只要是有序的即可。()

三.填空题

1. 以二分查找方法从长度为10 的有序表中查找一个元素时,平均查找长度为________。

2. 以折半(或二分)查找方法从长度为8 的有序表中查找一个元素时,平均查找长度为________。

3. 设在长度为20 的有序表中进行二分查找,则比较一次查找成功的结点数有_______个,比较两次查找成功有结点数有_________个。

4. 设查找表中有100 个元素,如果用二分法查找方法查找数据元素X,则最多需要比较________次就可以断定数据元素X 是否在查找表中。

5. 假设在有序线性表A[1..20] 上进行二分查找,则比较一次查找成功的结点数为________,则比较二次查找成功的结点数为________,则比较三次查找成功的结点数为________,则比较四次查找成功的结点数为________,比较五次________查找成功的结点数为,平均查找长度为________。

6. 对于长度为n 的线性表,若进行顺序查找,则时间复杂度为____;若采用二分法查找,则时间复杂度为________。

7. 根据初始关键字序列(19,22,01,38,10)建立的二叉排序树的高度为_________。

8. 向一棵B_树插入元素的过程中,若最终引起树根结点的分裂,则新树比原树的高度___________。

9. 设二叉排序树的高度为h,则在该树中查找关键字key 最多需要比较_________次。

10.对一棵二叉搜索树进行中序遍历时,得到的结点序列是一个________。对一棵由算术表达式组成的二叉语法树进行后序遍历得到的结点序列是该算术表达式的__________________。

11. 在一棵m 阶B_树上,每个非树根结点的关键字数目最少为________个,最多为________在归并排序中,进行每趟归并的时间复杂度为______,整个排序过程的时间复杂度为____________,空间复杂度为___________。

12. 对一棵B_树进行删除元素的过程中,若最终引起树根结点的合并时,会使新树的高度比原树的高度___________。

13. Hash 技术关键是________和________两个方面

14. 在散列存储中,装填因子a 的值越大,则____;a 的值越小,则____。

15.在线性表的散列存储中,处理冲突的常用方法有_______ 和_______两种。

四.简答题

1. 什么叫动态查找?什么叫静态查找?什么样的存储结构适宜于进行静态查找?什么样的存储结构适宜于进行动态查找?

2.什么叫平均查找长度?写出平均查找长度的定义.

3.输入一个正整数序列(53,17,12,66,58,70,87,25,56,60),试完成下列各题。

(1)按输入次序构造一棵二叉排序树(只要求画出最终二叉排序树)。

(2)依此二叉排序树,如何得到一个从小到大的有序序列?

4.若一棵排序二叉树的关键字输入序列为{80,6,10,7,8,25,100,90},请画出该二叉树。

5.已知一组关键字为{1,14,27,29,55,68,10,11,23},则按哈希函数H(key)=key MOD 13和链地址法处理冲突来构造哈希表。

(1)画出所构造的哈希表。

(2)在记录的查找概率相等的前提下,计算该表查找成功时的平均查找长度。

6.设有一组初始记录关键字为(45,80,48,40,22,78),要求构造一棵二叉排序树并给出构造过程。

7.设有一个输入数据的序列是 { 46, 25, 78, 62, 12, 80 }, 试画出从空树起,逐个输入各个数据而生成的二叉搜索树。

8.设散列表的长度为8,散列函数H(k)=k mod 7,初始记录关键字序列为(25,31,8,27,13,68),要求分别计算出用线性探测法和链地址法作为解决冲突方法的平均查找长度。

9.设有一组关键字,其出现次序为:105,97,28,52,37,22,16,90,45,76,59,74,采用哈希函数为H(key)=key MOD 13,试在0~14 的散列地址空间中对该关键字序列构造哈希表。

(1)采用线性探测再散列解决冲突。

(2)采用二次探测再散列解决冲突。

10.给定关键码序列( 11, 81, 23, 59,17,19, 68 ),散列表长度为11,散列函数为H(key)= ( 5 * key ) % 11,用二次探查法解决冲突,试画出插入所有关键码后得到的散列表,并计算查找成功与查找不成功时的平均搜索长度

六.设计题

1. 设计在顺序有序表中实现二分查找的算法(递归与非递归)。

2. 设计判断二叉树是否为二叉排序树的算法。

3. 设计求结点在二叉排序树中层次的算法。

4. 设计一个算法将二叉排序树按递减次序打印输出。

5. 设计在二叉排序树上查找结点X 的算法。

6. 设计在有n个结点的顺序表中查找最小的k(1≤k≤n)个结点。

第二章线性表

一、选择题

1.线性表是具有n个__C___的有限序列(n>0)。

A.表元素 B.字符 C.数据元素 D.数据项

2.一个顺序表所占用的存储空间大小与___B___无关。

A.表的长度B.元素的存放顺序

C.元素的类型D.元素中各字段的类型

3.线性表的顺序存储结构是一种__A___。

A.随机存取的存储方式B.顺序存取的存储方式

C.索引存取的存储方式D.Hash存取的存储方式

4. 若线性表采用顺序存储结构,每个元素占用 4 个存储单元,第一个元素的存储地址为 100,则第 12 个元素的存储地址是__B____。

A.112 B.144 C.148 D.412

5. 线性表是__A____。

A.一个有限序列,可以为空 B.一个有限序列,不能为空

C.一个无限序列,可以为空 D.一个无限序列,不能为空

6.对于顺序存储的线性表,访问结点和增加、删除结点的时间复杂度为__C____。A.O(n)O(n) B.O(n)O(1) C.O(1)O(n) D.O(1)O(1) 7.若长度为n的非空线性表采用顺序存储结构,删除表的第i个数据元素,首先需要移动表中___A____中数据元素。

A.n-i B.n+i C.n-i+1 D.n-i-1 8.对顺序存储的线性表,设其长度为n,在任何位置插入或删除操作都是等概率的。删除一个元素时平均要移动表中的____C____个元素。

A.n/2

B.(n+1)/2

C.(n-1)/2

D.n

9.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为__C____。(1≤i≤n+1)

A.O(0) B.O(1)C.O(n) D.O(n2)10.线性表中各链接点之间的地址___C____。

A.必须连续B.部分地址必须连续

C.不一定连续D.连续与否无所谓

11.在n个结点的线性表的数组表示中,算法的时间复杂度是O(1)的操作是_A______。

A.访问第i个结点后插入一个新结点(1≤i≤n)和求第i个结点的直接前驱(2

≤i≤n)

B.在第i个结点后插入一个新结点(1≤i≤n)

C.删除第i个结点(1≤i≤n)

D.以上都不对

12.单链表中,增加一个头结点的目的是为了____C_____。

A.使单链表至少有一个结点B.标识表结点中首结点的位置

C.方便运算的实现D.说明单链表是线性表的链式存储

13.对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是_B____。

A.head==NULL B.head->next==NULL

C.head->next==head D.head!=NULL

14.将长度为n的单链表链接在长度为m的单链表后面的算法的时间复杂度采用大O形式表示应该是___C____。

A.O(1) B.O(n) C.O(m) D.O(n+m)15.静态链表中指针表示的是___C____。

A.下一个元素的地址B.内存储器的地址

C.下一个元素在数组中的位置D.左链或右链指向的元素的地址

16.非空的循环单链表head的尾结点p满足__A______。

A.P->link=head B.P->link=NULL C.P=NULL D.P=head 17.某线性表用带头结点的循环单链表存储,头指针为head,当head->next->next==head成立时,线性表的长度是___B____。

A.0 B.1 C.2 D.3

18.在什么情况下,应使用链式结构存储线性表L?___B____

A.需经常修改L中的结点值B.需不断对L进行删除插入

C.需要经常查询L中的结点值D.L中结点结构复杂

19.与单链表相比较,双向链表的优点之一是___D_____。

A.可以省略头结点指针B.可以随机访问

C.插入、删除操作更简单D.顺序访问相邻结点更灵活

20.某线性表常发生的操作为删除第一个数据元素和最后一个元素后添加新元

素,采用__D__作为存储结构,能使其存储效率和时间效率最高。

A.单链表B.仅用头指针的循环单链表

C.双向循环链表D.仅用尾指针的循环单链表

21.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。则采用_D___存储方式最节省运算时间。

A.单链表 B.双链表 C.单循环链表D.带头结点的双循环链表22.对于一个线性表既要求能够进行较快的插入和删除,又要求存储结构能够反映数据之间的逻辑关系,则应用___C____。

A.顺序方式存储 B.散列方式存储 C.链接方式存储 D.以上方式均可23.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用___A___存储方式最节省时间。

A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表24.若线性表最常用的操作是存取第i个元素及其前驱和后继元素的值,为节省时间应采用的存储方式为___D_____。

A.单链表 B.双向链表 C.单循环链表 D.顺序表

25.下面哪一条是顺序存储结构的优点?___C______

A.插入运算方便B.可方便地用于各种逻辑结构的存储表示C.存储密度大D.删除运算方便

26.下面关于线性表的叙述中,错误的是___B_____。

A.线性表采用顺序存储,必须占用一批连续的存储单元

B.线性表采用顺序存储,便于进行插入和删除的操作

C.线性表采用链接存储,不必占用一片连续的存储单元

D.线性表采用链接存储,便于插入和删除操作

27.在非空线性链表中由p所指的链接点后面插入一个由q所指的链接点的过程是依次执行动作__B____。

A.q->link=p;p->link=q;B.q-link=p->link;p->link=q;

C.q->link=p->link;p=q;D.p->link=q;q->link=p;

26.在非空双向循环链表中由q所指的链接点前面插入一个由p指的链接点的过程是依次执行语句p->rlink=q;p->llink=q->llink;q->llink=p; ____D____。

A.q->rlink->llink=p; B.q->llink->rlink=p;

C.p->rlink->llink=p; D.p->llink->rlink=p;

29.在非空双向循环链表中由q所指的链接点后面插入一个由p指的链接点的动作依次为__D____。

A.p->llink=q ; p->rlink=q->rlink ; q->rlink=p ; q->rlink->llink=p;B.p->rlink=q->rlink ; p->llink=q ; q->rlink ; q->rlink->llink=p;C.p->llink=q ; p->rlink=q->rlink ; q->rlink=p ; p->llink->rlink=p;D.p->llink=q ; p->rlink=q->rlink ; q->rlink=p ; p->rlink->llink=p;30.在双向链表存储结构中,删除p所指的结点时须修改指针__A____。

A.p->llink->rlink=p->rlink ; p->rlink->llink=p->llink ;

B.p->llink=p->llink->llink ; p->llink->rlink=p ;

C.p->rlink->llink=p ; p->rlink=p->rlink->rlink ;

D.p->rlink=p->llink->llink ; p->llink=p->rlink->rlink ;

31.单链表的存储密度为__C____。

A.大于1 B.等于5 C.小于1 D.不能确定

二.判断题

1. 线性表的逻辑顺序与存储顺序总是一致的。()

2. 线性表的顺序存储结构比链式存储结构更好。()

3. 线性表中的所有元素都有一个前驱元素和后继元素。()

4. 不论线性表采用顺序存储结构还是链式存储结构,删除值为X 的结点的时间复杂度均为O(n)。()

5. 线性的数据结构可以顺序存储,也可以链接存储。非线性的数据结构只能链接存储。()

6. 非空线性表中任意一个数据元素都有且仅有一个直接后继元素。()

7. 用一组地址连续的存储单元存放的元素一定构成线性表。()

8. 线性表在顺序存储时,逻辑上相邻的元素未必在存储的物理位置次序上相邻。

()

9. 顺序表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。()

10. 顺序表中所有结点的类型必须相同。()

11. 对链表进行插入和删除操作时不必移动链表中结点。()

12. 非空的双向循环链表中任何结点的前驱指针均不为空。()

13. 链式存储在插入和删除时需要保持物理存储空间的顺序分配,不需要保持数据元素之间的逻辑顺序。()

14. 单链表从任何一个结点出发,都能访问到所有结点。()

15. 符号p->next 出现在表达式中表示p 所指的那个结点的内容。()

16. 带表头结点的双向循环链表判空的条件是: first->rlink == first(first 为表头指针)。()

三、综合应用题

1.利用顺序表的操作,实现以下函数:

1)从顺序表中删除具有最小值的元素并由函数返回被删除元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。

2)从顺序表中删除第i个元素并由函数返回被删除元素的值,如果i不合理或顺序表为空则显示出错信息并退出运行。

3)向顺序表中第i个位置插入一个新元素x。如果i不合理则显示出错信息并退出运行

4)从顺序表中删除具有给定值x的所有元素。

5)从顺序表中删除其值在给定值s与t之间(要求s小于t)的所有元素。如果s或t不合理或者顺序表为空,则显示错误信息并退出。

6)从有序顺序表中删除其值在给定值s与t之间(要求s小于t)的所有元素,如果s或t不合理或顺序表为空,则显示错误信息并退出。

7)将两个有序顺序表合并成一个新的有序顺序表并由函数返回结果顺序表

8)从有序顺序表中删除所有其值重复的元素,使表中所有元素的值均不相同。

2.请设计算法将不带头结点的单链表就地逆置。

3.有一个单链表L(至少有1个结点),其头结点指针为head,编写一个过程将L逆置,即最后一个结点变成第一个结点,原来倒数第二个结点变成第二个结点,如此等等。

4.设有一个由正整数组成的无序(向后)单链表,编写完成下列功能的算法:

找出最小值结点,且打印该数值。

若该数值是奇数,则将其与直接后继结点的数值交换。

若该数值是偶数,则将其直接后继结点删除。

5.给定(已生成)一个带表头结点的单链表,设head为头指针,结点的结

构为(data,next),data为整型元素,next为指针,试写出算法:按递增次序输出单链表中各结点的数据元素,并释放结点所占的存储空间(要求:不允许使用数组作辅助空间)。

6.假设有两个按元素值递增次序排列的线性表,并要求利用原来两个单链表的结点存放归并后的单链表。

7.在一个递增有序的线性表中,有数值相同的元素存在。若存储方式为单链表,设计算法去掉数值相同的元素,使表中不再有重复的元素。例如:(7,10,10,21,30,42,42,42,51,70)将变为(7,10,21,30,42,51,70)。

8.试编写在带头结点的单链表中删除一个最小值结点的高效算法:void delete(Linklist &L)。

9.已知两个单链表A和B,其头指针分别为heada和headb,编写一个过程从单链表A中删除自第i个元素起的共len个元素,然后将单链表A插入到单链表B的第j个元素之前。

10.已知非空线性表由list指出,链结点的构造为(data,link)。请写一算法,将链表中数据域值最小的那个链结点移到链表的最前面(要求:不得额外申请新的链结点)。

11.带头结点且头指针为ha和hb的两线性表A和B分别表示两个集合,两表中的元素皆为递增有序。请写一算法求A和B的并集A U B,要求该并集中的元素仍保持递增有序,且要利用A和B的原有结点空间。

12.已知两个链表A和B分别表示两个集合,其元素递增排列。编写一函数程序,求A与B的交集,并存放于A链表中。

13.设计一个求两个集合A和B之差C=A-B的程序,即当且仅当e是A的一个元素,但不是B中的一个元素时,e才是C中的一个元素。集合用有序链表实现,初始时,A、B集合中的元素按递增排列,C为空;操作完成后,A、B保持不变,C中元素按递增排列。下面的函数append(last,e)是把值为e的新结点链接在由指针last指向的结点的后面,并返回新结点的地址;在执行A-B运算之前,用于表示结果集合的链表首先增加一个附加的表头结点,以便新结点的添加,当A-B运算执行完毕后,再删除并释放表示结果集合的链表的表头结点。

typedef struct node{

int element;

struct node *link;

}NODE;;

NODE *A,*B,*C;

NODE *append (NODE *last,int e){

last->link=(NODE*)malloc(sizeof(NODE));

last->link->element=e;

return (last->link);

}

NODE *difference (NODE *A,NODE *B)

{

………

}

14.设一单向链表的头指针为head,链表的记录中包含着整数类型的key域,试设计算法,将此链表的记录按照key递增的次序进行就地排序。

15.设计算法将一个带头结点的单链表A分解为两个具有相同结构的链表B、C,其中B表的结点为A表中值小于零的结点,而C表的结点为A表中值大于等于零的结点(链表A的元素类型为整型,要求B、C表利用A表的结点)。

16.将一个带头结点的单链表A分解为两个带头结点的单链表A和B,使得A 表中含有原表中序号为奇数的元素,而B表中含有原表中序号为偶数的元素,且保持其相对顺序不变。

1)写出其类型定义。

2)写出算法。

17.两个整数序列A=a

1,a

2

,a

3

,…,a

m

和B=b

1

,b

2

,b

3

,…,b

n

已经存入两

个单链表中,设计一个算法,判断序列B是否是序列A的子序列。

18.已知线性表(a

1,a

2

,a

3

,…,a

n

)按顺序存于内存,每个元素都是整数,

试设计用最少时间把所有值为负数的元素移到全部正数值(假设0为正数)元素前边的算法。例如:(x,-x,-x,x,x,-x, …,x)变为(-x,-x,-x, …,x,x,x)。

19.一元稀疏多项式以循环单链表按降幂排列,结点有三个域,系数域coef,

指数域exp和指针域next。现对链表求一阶导数,链表的头指针为ha,头结点的exp域为-1。

20.设用带头结点的双向循环链表表示的线性表为L=(a

1,a

2

,a

3

, …,a

n

)。

写出算法将L改造成:L=(a

1,a

3

, …,a

n

, …,a

4

,a

2

).

结点和结点指针类型定义如下:

typedef struct node{

ElemType data;

Struct node *prior,next;

}*DLinkList;

21.设有一个头指针为L的带有表头结点的非循环双向链表,其每个结点中除有pred(前驱指针)、data(数据)和next(后继指针)域外,还有一个访问频度域freq。在链表被起用前,其值均初始化为零。每当在链表中进行一次Locate(L,x)运算时,令元素值为x的结点中freq域的值增1,并使此链表中结点保持按访问频度非增(递减)的顺序排列,同时最近访问的结点排在频度相同的结点的最后,以便使频繁访问的结点总是靠近表头。试编写符合上述要求的Locate(L,x)运算的算法,该运算为函数过程,返回找到结点的地址,类型为指针型。

第九章排序

一、选择题

1.下述排序算法中,稳定的是________。

A.直接选择排序B.直接插入排序C.快速排序D.堆排序

2.下列排序算法中,________需要的辅助存储空间最大。

A.快速排序B.插入排序C.希尔排序D.归并排序3.下列排序算法中,________是稳定的。

A.插入、希尔B.冒泡、快速C.选择、堆排序D.基数、归并4.下列各种排序算法中平均时间复杂度为O(n2)的是________。

A.快速排序B.堆排序C.归并排序D.冒泡排序

5. 在待排序的元素基本有序的前提下,效率最高的排序方法是________。A.简单插入排序B.简单选择排序C.快速排序D.归并排序

6. 利用直接插入排序法的思想建立一个有序线性表的时间复杂度为_______。A.O(n) B.O(nlog2n) C.O(n2) D.O(log2n)

7. 对n个记录进行堆排序,所需要的辅助存储空间为________。

A.O(1og2n) B.O(n) C.O(1) D.O(n2)

8. 快速排序在最坏情况下的时间复杂度为________。

A.O(log2n) B.O(nlog2n) C.O(n) D.O(n2)

9. 设有序列12、42、37、19,当使用直接插入排序从小到大排序时,其比较次数为________。

A.3 B.4 C.5 D.6

10. 对数据元素序列( 49, 72, 68, 13, 38, 50, 97, 27 )排序,前三趟排序结束时的结果依次为:

第一趟:13, 72, 68, 49, 38, 50, 97, 27;

第二趟:13, 27, 68, 49, 38, 50, 97, 72;

第三趟:13, 27, 38, 49, 68, 50, 97, 72;

该排序采用的方法是_________。

A. 直接插入排序

B. 直接选择排序

C. 冒泡排序

D. 堆排序

11. 如果待排序序列中两个数据元素具有相同的值,在排序前后它们的相互位置发生颠倒,则称该排序算法是不稳定的。________就是不稳定的排序方法。A.起泡排序B.归并排序C.直接插入排序D.简单选择排序12. 设一组初始记录关键字的长度为8,则最多经过________趟插入排序可以得到有序序列。

A.6 B.7 C.8 D.9

13. 设一组初始记录关键字序列为(Q,H,C,Y,P,A,M,S,R,D,F,X),则按字母升序的第一趟冒泡排序结束后的结果是________。

A.F,H,C,D,P,A,M,Q,R,S,Y,X

B.P,A,C,S,Q,D,F,X,R,H,M,Y

C.A,D,C,R,F,Q,M,S,Y,P,H,X

D.H,C,Q,P,A,M,S,R,D,F,X,Y

14. 每次从无序表中取出一个元素,把它插入到有序表中的适当位置,此种排序方法叫做________ 排序。

A.插入B.堆C.快速D.归并

15.每次从无序表中挑选出一个最小或最大元素,把它交换到有序表的一端,此种排序方法叫做________排序。

A.插入B.堆C.快速D.归并

16.下列________种排序算法的平均时间复杂度为O(nlog2n)。

A.简单选择排序B.简单插入排序C.冒泡排序D.归并排序17. 下列________种排序算法更适合于外部排序。

A.选择排序B.插入排序C.冒泡排序D.归并排序18. 设一组初始记录关键字序列(5,2,6,3,8),以第一个记录关键字5为基准进行一趟快速排序的结果为________ 。

A.2,3,5,8,6 B.3,2,5,8,6

C.3,2,5,6,8 D.2,3,6,5,8

19. 二路归并排序的时间复杂度为________。

A.O(n) B.O(n2) C.O(nlog2n) D.O(log2n)

20. 时间复杂度不受数据初始状态影响而恒为O(nlog2n)的是________。

A.堆排序B.冒泡排序C.希尔排序D.快速排序21.一趟排序结束后不一定能够选出一个元素放在其最终位置上的是________。A.堆排序B.冒泡排序C.快速排序D.希尔排序

22.设有5000 个待排序的记录关键字,如果需要用最快的方法选出其中最小的10 个记录关键字,则用下列________方法可以达到此目的。

A.快速排序B.堆排序C.归并排序D.插入排序

23. 设一组初始关键字记录关键字为(20,15,14,18,21,36,40,10),则以20 为基准记录的一趟快速排序结束后的结果为________。

A.10,15,14,18,20,36,40,21

B.10,15,14,18,20,40,36,21

C.10,15,14,20,18,40,36,2l

相关主题
相关文档
最新文档