数据结构与算法分析六套期末复习题含答案.docx
《数据结构与算法分析六套期末复习题含答案.docx》由会员分享,可在线阅读,更多相关《数据结构与算法分析六套期末复习题含答案.docx(28页珍藏版)》请在冰点文库上搜索。
数据结构与算法分析六套期末复习题含答案
试题一
一、单项选择题(每小题2分,共20分)
(1)以下数据结构中哪一个是线性结构?
( )
A)有向图 B)队列C)线索二叉树 D)B树
(2)在一个单链表HL中,若要在当前由指针p指向的结点后面插入一个由q指向的结点,则执行如下( )语句序列。
A)p=q;p->next=q;B)p->next=q;q->next=p;
C)p->next=q->next;p=q;D)q->next=p->next;p->next=q;
(3)( )不是队列的基本运算。
A)在队列第i个元素之后插入一个元素B)从队头删除一个元素
C)判断一个队列是否为空D)读取队头元素的值
(4)字符A、B、C依次进入一个栈,按出栈的先后顺序组成不同的字符串,至多可以组成( )个不同的字符串。
A)14B)5 C)6 D)8
(5)由权值分别为3,8,6,2的叶子生成一棵哈夫曼树,它的带权路径长度为( )。
A)11B)35C)19D)53
以下6-8题基于下图:
(6)该二叉树结点的前序遍历的序列为( )。
A)E、G、F、A、C、D、BB)E、A、G、C、F、B、D
C)E、A、C、B、D、G、FD)E、G、A、C、D、F、B
(7)该二叉树结点的中序遍历的序列为( )。
A)A、B、C、D、E、G、FB)E、A、G、C、F、B、D
C)E、A、C、B、D、G、FD)B、D、C、A、F、G、E
(8)该二叉树的按层遍历的序列为( )。
A)E、G、F、A、C、D、BB)E、A、C、B、D、G、F
C)E、A、G、C、F、B、DD)E、G、A、C、D、F、B
(9)下面关于图的存储的叙述中正确的是( )。
A)用邻接表法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关
B)用邻接表法存储图,占用的存储空间大小与图中边数和结点个数都有关
C)用邻接矩阵法存储图,占用的存储空间大小与图中结点个数和边数都有关
D)用邻接矩阵法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关
(10)设有关键码序列(q,g,m,z,a,n,p,x,h),下面哪一个序列是从上述序列出发建堆的结果?
( )
A)a,g,h,m,n,p,q,x,zB)a,g,m,h,q,n,p,x,z
C)g,m,q,a,n,p,x,h,zD)h,g,m,p,a,n,q,x,z
二、(本题8分)
对于序列{8,18,6,16,29,28},试写出堆顶元素最小的初始堆。
三、(本题8分)
一棵二叉树的先序、中序和后序序列分别如下,其中有一部分未显示出来。
试求出空格处的内容,并画出该二叉树。
先序序列:
BFICEHG
中序序列:
DKFIAEJC
后序序列:
KFBHJGA
四、(每小题2分,共8分)
设有序列:
w={23,24,27,80,28},试给出:
(1)二叉排序树;
(2)哈夫曼树;
(3)平衡二叉树;
(4)对于增量d=2按降序执行一遍希尔排序的结果。
五、(本题15分)
假设二叉树中每个结点所含数据元素均为单字母,以二叉链表为存储结构,试编写算法按如下图所示的树状显示二叉树。
【答案】==================================
一、单项选择题
(1)B
(2)D(3)A(4)B(5)B
(6)C(7)A(8)C(9)B(10)B
二、(本题8分)
所构造的堆如下图所示:
三、(本题8分)
在先序序列空格中依次填ADKJ,中序中依次填BHG,后序中依次填DIEC。
四、(每小题2分,共8分)
(1)二叉排序树如下图所示:
(2)哈夫曼树如下图所示:
(3)平衡二叉树如下图所示:
(4)对于增量d=2按降序执行一遍希尔排序的结果:
28,80,27,24,23
五、(本题15分)
从上图来看,二叉树的第一层显示在第一列,第二层显示在第二列,第三层显示在第三列;每行显示一个结点,从上至下是先显示右子树,再显示根,最后最左子树,也就是以先遍历右子树,最后遍历左子树的中序遍历次序显示各结点。
C语言版测试程序见exam1\10c,具体算当如下:
voidDisplayBTWithTreeShape(BiTreeT,intlevel=1)
//按树状形式显示二叉树,level为层次数,可设根结点的层次数为1
{
if(T)
{//空树不显式,只显式非空树
DisplayBTWithTreeShape(T->rchild,level+1);//显示右子树
cout<for(inti=0;icout<<"";//确保在第level列显示结点
cout<data;//显示结点
DisplayBTWithTreeShape(T->lchild,level+1);//显示左子树
}
}
=========================================================================
试题二
一、单项选择题(每小题2分,共20分)
(1)设Huffman树的叶子结点数为m,则结点总数为( )。
A)2mB)2m-1
C)2m+1D)m+1
(2)若顺序存储的循环队列的QueueMaxSize=n,则该队列最多可存储( )个元素。
A)nB)n-1C)n+1D)不确定
(3)下述哪一条是顺序存储方式的优点?
( )
A)存储密度大B)插入和删除运算方便
C)获取符合某种条件的元素方便D)查找运算速度快
(4)设有一个二维数组A[m][n],假设A[0][0]存放位置在600(10),A[3][3]存放位置在678(10),每个元素占一个空间,问A[2][3](10)存放在什么位置?
(脚注(10)表示用10进制表示,m>3)( )。
A)658B)648C)633D)653
(5)下列关于二叉树遍历的叙述中,正确的是( )。
A)若一个叶子是某二叉树的中序遍历的最后一个结点,则它必是该二叉树的前序遍历最后一个结点
B)若一个结点是某二叉树的前序遍历最后一个结点,则它必是该二叉树的中序遍历的最后一个结点
C)若一个结点是某二叉树的中序遍历的最后一个结点,则它必是该二叉树的前序最后一个结点
D)若一个树叶是某二叉树的前序最后一个结点,则它必是该二叉树的中序遍历最后一个结点
(6)k层二叉树的结点总数最多为( )。
A)2k-1B)2k+1C)K-1 D)k-1
(7)对线性表进行二分法查找,其前提条件是( )。
A)线性表以链接方式存储,并且按关键码值排好序
B)线性表以顺序方式存储,并且按关键码值的检索频率排好序
C)线性表以顺序方式存储,并且按关键码值排好序
D)线性表以链接方式存储,并且按关键码值的检索频率排好序
(8)对n个记录进行堆排序,所需要的辅助存储空间为( )。
A)O(1og2n) B)O(n) C)O
(1)D)O(n2)
(9)对于线性表(7,34,77,25,64,49,20,14)进行散列存储时,若选用H(K)=K%7作为散列函数,则散列地址为0的元素有( )个。
A)1B)2C)3D)4
(10)下列关于数据结构的叙述中,正确的是( )。
A)数组是不同类型值的集合
B)递归算法的程序结构比迭代算法的程序结构更为精炼
C)树是一种线性结构
D)用一维数组存储一棵完全二叉树是有效的存储方法
二、(本题8分)
假定一棵二叉树广义表表示为a(b(c),d(e,f)),分别写出对它进行先序、中序、后序、按层遍历的结果。
三、(本题8分)
树有哪些遍历方法?
它们分别对应于把树转变为二叉树的哪些遍历方法?
四、(本题8分)
设有数组A[-1:
3,0:
6,-2:
3],按行为主序存放在2000开始的连续空间中,如元素的长度是5,试计算出A[1,1,1]的存储位置。
五、(本题8分)
设有一个输入数据的序列是{46,25,78,62,12,80},试画出从空树起,逐个输入各个数据而生成的二叉搜索树。
六、(本题15分)
以二叉链表作存储结构,试编写计算二叉树中叶子结点数目的递归算法。
【答案】==================================
一、单项选择题(每小题2分,共20分)
(1)B
(2)B(3)A(4)D(5)A
(6)A(7)C(8)C(9)D(10)D
二、(本题8分)
先序:
a,b,c,d,e,f
中序:
c,b,a,e,d,f
后序:
c,b,e,f,d,a
按层:
a,b,d,c,e,f
遍历序列为:
abedc。
三、(本题8分)
树的遍历方法有先根序遍历和后根序遍历,它们分别对应于把树转变为二叉树后的先序遍历与中序遍历方法。
四、(本题8分)
A[1,1,1]的存储位置=2000+((1-(-1))*(6-0+1)*(3-(-2)+1)+(1-0)*(3-(-2)+1)+(1-(-2)))*5=2465。
五、(本题8分)
六、(本题15分)
本题只要在遍历二叉树的过程序中对叶子结点进行记数即可。
C语言版测试程序见exam2\10c,具体算当如下:
longLeafCount(BiTreeT)
//计算二叉树中叶子结点数目
{
if(T==NULL)
return0;//空树返回0
elseif(T->lchild==NULL&&T->rchild==NULL)
return1;//只有一个结点的树返回1
else
//叶子结点数为左右子树的叶子结点数之和
returnLeafCount(T->lchild)+LeafCount(T->rchild);
}
试题三
一、单项选择题(每小题2分,共20分)
(1)对一个算法的评价,不包括如下( )方面的内容。
A)健壮性和可读性B)并行性C)正确性D)时空复杂度
(2)在带有头结点的单链表HL中,要向表头插入一个由指针p指向的结点,则执行( )。
A)p->next=HL->next;HL->next=pB)p->next=HL;HL=p
C)p->next=HL;p=HLD)HL=p;p->next=HL
(3)对线性表,在下列哪种情况下应当采用链表表示?
( )
A)经常需要随机地存取元素B)经常需要进行插入和删除操作
C)表中元素需要占据一片连续的存储空间D)表中元素的个数不变
(4)一个栈的输入序列为123,则下列序列中不可能是栈的输出序列的是( )。
A)231B)321C)312D)123
(5)每一趟都能选出一个元素放在其最终位置上,并且不稳定的排序算法是( )。
A)冒泡排序B)简单选择排序C)希尔排序D)直接插入排序
(6)采用开放定址法处理散列表的冲突时,其平均查找长度( )。
A)低于链接法处理冲突B)高于链接法处理冲突
C)与链接法处理冲突相同D)高于二分查找
(7)若需要利用形参直接访问实参时,应将形参变量说明为( )参数。
A)值B)函数C)指针D)引用
(8)在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点都具有相同的( )。
A)行号B)列号C)元素值D)非零元素个数
(9)快速排序在最坏情况下的时间复杂度为( )。
A)O(log2n)B)O(nlog2n)C)O(n)D)O(n2)
(10)从二叉搜索树中查找一个元素时,其时间复杂度大致为( )。
A)O(n)B)O
(1)C)O(log2n)D)O(n2)
二、(本题8分)
如果在1000000个记录中找出两个最小的记录,你认为采用什么样的排序方法所需的关键字比较次数最少?
最多比较多少次?
三、(本题8分)
假设把n个元素的序列(a1,a2,…an)满足条件ak若在一个无序序列中有一对元素ai>aj(i如果对,请说明为什么?
如果不对,请举一例说明。
四、(每小题4分,共8分)
设内存有大小为6个记录的缓冲区供内排序使用,文件的关键字序列为{29,50,70,33,38,60,28,31,43,36,25,9,80,100,57,18,65,2,78,30,14,20,17,99),试列出:
(1)用内排序求出初始归并段;
(2)用置换一选择排序求初始归并段。
五、(本题9分)
已知关键字序列{23,13,5,28,14,25},试构造二叉排序树。
六、(本题15分)
编写一个算法求二又树的深度。
【答案】==================================
一、单项选择题(每小题2分,共20分)
(1)B
(2)A(3)B(4)C(5)B
(6)B(7)D(8)A(9)D(10)C
二、(本题8分)
采用树形选择排序方法所需的关键字比较次数最少,最多比较次数=999999+
=1000019次。
三、(本题8分)
不对,例如序列{3、3、4、2、l}的“逆序元素”个数是2,2和1是“逆序元素”;但是将第二个3和2交换后,成为{3、2、4、3、l},此时“逆序元素”个数是3,2、3和1是“逆序元素”。
然而交换后一定减少的是“逆序对”的个数,例如上例中{3、3、4、2、l}的逆序对的个数是7,交换第二个3和2后,{3、2、4、3、1}的逆序对的个数是6。
四、(每小题4分,共8分)
(1)用内排序求出初始归并段为:
归并段1:
29,33,38,50,60,70:
归并段2:
9,25,28,31,36,43
归并段3:
2,18,57,65,80,100:
归并段4:
14,17,20,30,78,99.
(2)用置换一选择排序求初始归并段为:
归并段1:
29,33,38,50,60,70,80,100
归并段2:
9,18,25,28,31,36,57,65,78,99;
归并段3:
2,14,17,20,30.
五、(本题9分)
构造二叉排序树的过程如下图所示。
构造的二叉排序树如下图所示:
六、(本题15分)
若二叉树为空,深度为0;若二叉树不空,则二叉树的深度为左右子树深度的最大值加1。
本题最简单算法是递归算法。
C语言版测试程序见exam3\10c,具体算当如下:
intBiTreeDepth(BiTreeT)
//求二叉树的深度
{
if(T==NULL)
return0;//空二叉树的深度为0
else
{
intd_lsub,d_rsub;
d_lsub=BiTreeDepth(T->lchild);//左子树的深度
d_rsub=BiTreeDepth(T->rchild);//右子树的深度
//返回左右子树的深度最大值加1
return((d_lsub>d_rsub)?
d_lsub:
d_rsub)+1;
}
}
试题四
一、单项选择题(每小题2分,共20分)
(1)以下数据结构中哪一个是线性结构?
( )
A)有向图B)栈C)二叉树 D)B树
(2)若某链表最常用的操作是在最后一个结点之后插入一个结点和删除最后一个结点,则采用( )存储方式最节省时间。
A)单链表B)双链表C)带头结点的双循环链表D)单循环链表
(3)( )不是队列的基本运算。
A)在队列第i个元素之后插入一个元素B)从队头删除一个元素
C)判断一个队列是否为空D)读取队头元素的值
(4)字符A、B、C、D依次进入一个栈,按出栈的先后顺序组成不同的字符串,至多可以组成( )个不同的字符串?
A)15B)14C)16D)21
(5)由权值分别为4,7,6,2的叶子生成一棵哈夫曼树,它的带权路径长度为( )。
A)11B)37C)19D)53
以下6-8题基于下面的叙述:
若某二叉树结点的中序遍历的序列为A、B、C、D、E、F、G,后序遍历的序列为B、D、C、A、F、G、E。
(6)则该二叉树结点的前序遍历的序列为( )。
A)E、G、F、A、C、D、BB)E、A、G、C、F、B、D
C)E、A、C、B、D、G、FD)E、G、A、C、D、F、B
(7)该二叉树有( )个叶子。
A)3B)2 C)5D)4
(8)该二叉树的按层遍历的序列为( )。
A)E、G、F、A、C、D、B B)E、A、C、B、D、G、F
C)E、A、G、C、F、B、DD)E、G、A、C、D、F、B
(9)下面的二叉树中,( C )不是完全二叉树。
(10)设有关键码序列(q,g,m,z,a),( )序列是从上述序列出发建的小根堆的结果。
A)a,g,m,q,zB)a,g,m,z,qC)g,m,q,a,zD)g,m,a,q,z
二、(本题8分)
设有一个输入数据的序列是{46,25,78,62,12,80},试画出从空树起,逐个输入各个数据而生成的二叉排序树。
三、(本题8分)
给定一个关键字序列{24,19,32,43,38,6,13,22},请写出快速排序第一趟的结果;堆排序时所建的初始堆;然后回答上述两种排序方法中哪一种方法使用的辅助空间最小,在最坏情况下哪种方法的时间复杂度最差?
四、(本题8分)
设二维数组A[0:
10,-5:
0],按行优先顺序存储,每个元素占4个单元,A[0][-5]的存储地址为1000,则A[9][-2]的存储地址为多少?
五、(本题8分)
用一维数组存放的一棵完全二叉树:
ABCDEFGHIJKL。
请写出后序遍历该二叉树的访问结点序列。
六、(本题8分)
请说明对一棵二叉树进行前序、中序和后序遍历,其叶结点的相对次序是否会发生改变?
为什么?
七、(本题9分)
已知一棵二叉树的先序序列与中序序列分别如下,试画出此二叉树。
先序序列:
ABCDEFGHIJ
中序序列:
CBEDAGHFJI
八、(本题15分)
已知二叉排序树采用二叉链表存储结构,根结点的指针为T,请写出递归算法,从小到大输出该二叉排序树中所有关键字值≥K的结点的关键字的值。
【答案】==================================
一、单项选择题(每小题2分,共20分)
(1)B
(2)C(3)A(4)B(5)B
(6)C(7)A(8)C(9)C(10)B
二、(本题8分)
如下图所示:
三、(本题8分)
快速排序的第一趟结果为{22,19,13,6,24,38,43,12};堆排序时所建立的初始大顶堆如所图所示:
两种排序方法所需辅助空间:
堆是O
(1),快速排序是O(logn),可见堆排序所需辅助空间较少;在最坏情况下两种排序方法所需时间:
堆是O(nlogn),快速排序是O(n2),所以,可见快速排序时间复杂度最差。
注意:
快速排序的平均时排序速度最快,但在最坏情况下不一定比其他排序方法快。
四、(本题8分)
依题意A的起始地址为1000,则有:
Loc(9,-2)=1000+[(9-0)*(0-(-5)+1)+(-2-(-5))]*4=1228。
五、(本题8分)
先画出该二叉树的树形结构。
对其进行后序遍历得到后序序列为:
HIDJKEBLFGCA。
六、(本题8分)
二叉树任两个中叶结点必在某结点的左/右子树中,三种遍历方法对左右子树的遍历都是按左子树在前、右子树在后的顺序进行遍历的。
所以在三种遍历序列中叶结点的相对次序是不会发生改变的。
七、(本题9分)
先由先序序列的第一个结点确定二叉树的根结点,再由根结点在中序序列中左侧部分为左子树结点,在右侧部分为右子树结点,再由先序序列的第一个结点确定根结点的左右孩子结点,由类似的方法可确定其他结点,如下图所示。
八、(本题15分)
由于二叉排序树是中序有序的,因此对二叉排序树采用中序遍历依次输出大于等于K的结点即可。
C语言版测试程序见exam4\10c,具体算当如下:
voidDisplayKey(BiTreeT,KeyTypeK)
//从小到大输出该二叉排序树中所有关键字值≥K的结点的关键字的值
{
if(T)
{
DisplayKey(T->lchild,K);//输出左子树
if(T->data.key>=K)
cout<data.key<<"";//输出满足条件的关键值
DisplayKey(T->rchild,K);//输出右子树
}
}
试题五
一、单项选择题(每小题2分,共20分)
(1)队列的特点是( )。
A)先进后出B)先进先出
C)任意位置进出D)前面都不正确
(2)有n个记录的文件,如关键字位数为d,基数为r,则基数排序共要进行( )遍分配与收集。
A)nB)dC)rD)n-d
(3)在二叉树结点的先序序列、中序序列和后序序列中,所有叶子结点的先后顺序( )。
A)都不相同B)完全相同
C)先序和中序相同,而与后序不同D)中序和后序相同,而与先序不同
(4)限定在一端加入和删除元素的线性表称为( )。
A)双向链表B)单向链表C)栈D)队列
(5)快速排序执行一遍之后,已经到位的元素个数是( )。
A)1B)3C)
D)
(6)设森林F对应的二叉树为B,它有m个结点,B的根为p,p的右子树上的结点个数为n,森林F中第一棵树的结点个数是( )。
A)m-n-1B)n+1C)m-n+1D)m-n
(7)设有198个初始归并段,如采用K-路平衡归并三遍完成排序,则K值最大为( )。
A)12B)13C)14D)15
(8)下面关于广义表的叙述中,不正确的是( )。
A)广义表可以是一个多层次的结构B)广义表至少有一个元素
C)广义表可以被其他广义表所共享D)广义表可以是一个递归表
(9)设二叉树根结点的层次为0,一棵深度(高度)为k的满二叉树和同样深度完全二叉树各有f个结点和c个结点,下列关系式不正确的是( )。