大学
《数据结构与算法分析》课程
习题及参考答案
模拟试卷一
一、单选题(每题 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.14
B.5
C.6
D.8
5.由权值分别为3,8,6,2的叶子生成一棵哈夫曼树,它的带权路径长度为(    )。
以下6-8题基于图1。
6.该二叉树结点的前序遍历的序列为(  )。
A.E、G、F、A、C、D、B
B.E、A、G、C、F、B、D
C.E、A、C、B、D、G、F
D.E、G、A、C、D、F、B
7.该二叉树结点的中序遍历的序列为(  )。
A. A、B、C、D、E、G、F
B. E、A、G、C、F、B、D
C. E、A、C、B、D、G、F
E.B、D、C、A、F、G、E
8.该二叉树的按层遍历的序列为(  )。
A.E、G、F、A、C、D、B              B. E、A、C、B、D、G、F
C. E、A、G、C、F、B、D
D. 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,z
B.  a,g,m,h,q,n,p,x,z
C.  g,m,q,a,n,p,x,h,z
D.  h,g,m,p,a,n,q,x,z
二、填空题(每空1分,共26分)
1.数据的物理结构被分为_________、________、__________和___________四种。
2.对于一个长度为n的顺序存储的线性表,在表头插入元素的时间复杂度为_________,
在表尾插入元素的时间复杂度为____________。
3.向一个由HS指向的链栈中插入一个结点时p时,需要执行的操作是________________;
删除一个结点时,需要执行的操作是______________________________(假设栈不空而
且无需回收被删除结点)。
4.对于一棵具有n个结点的二叉树,一个结点的编号为i(1≤i≤n),若它有左孩子则左
孩子结点的编号为________,若它有右孩子,则右孩子结点的编号为________,若它有
双亲,则双亲结点的编号为________。
5.当向一个大根堆插入一个具有最大值的元素时,需要逐层_________调整,直到被调整
到____________位置为止。
6.以二分查方法从长度为10的有序表中查一个元素时,平均查长度为________。
7.表示图的三种常用的存储结构为_____________、____________和_______________。
8.对于线性表(70,34,55,23,65,41,20)进行散列存储时,若选用H(K)=K %7
作为散列函数,则散列地址为0的元素有________个,散列地址为6的有_______个。
9.在归并排序中,进行每趟归并的时间复杂度为______,整个排序过程的时间复杂度为
____________,空间复杂度为___________。
10.在一棵m阶B_树上,每个非树根结点的关键字数目最少为________个,最多为________
个,其子树数目最少为________,最多为________。
三、运算题(每题 6 分,共24分)
1.写出下列中缀表达式的后缀形式:
(1)3X/(Y-2)+1
(2)2+X*(Y+3)
2.试对图2中的二叉树画出其:
(1)顺序存储表示的示意图;
(2)二叉链表存储表示的示意图。
3.判断以下序列是否是小根堆? 如果不是, 将它调
图2 整为小根堆。
(1){ 12, 70, 33, 65, 24, 56, 48, 92, 86, 33 }
(2){ 05, 23, 20, 28, 40, 38, 29, 61, 35, 76, 47, 100 }
4.已知一个图的顶点集V和边集E分别为:
V={1,2,3,4,5,6,7};
E={(1,2)3,(1,3)5,(1,4)8,(2,5)10,(2,3)6,(3,4)15,(3,5)12,(3,6)9,(4,6)4,          (4,7)20,(5,6)18,(6,7)25};
按照普里姆算法从顶点1出发得到最小生成树,试写出在最小生成树中依次得到的各条边。
四、阅读算法(每题7分,共14分)
1.void AE(Stack& S){
InitStack(S);
Push(S,3);
Push(S,4);
int x=Pop(S)+2*Pop(S);
Push(S,x);
int i,a[5]={1,5,8,12,15};
for(i=0;i<5;i++) Push(S,2*a[i]);
while(!StackEmpty(S)) cout<<Pop(S)<<' ';
}
该算法被调用后得到的输出结果为:
2.void ABC (BTNode *BT,int &c1,int &c2) {
if (BT !=NULL ) {
ABC(BT->left,c1,c2);
c1++;
if (BT->left==NULL&&BT->right==NULL)  c2++;
ABC(BT->right,c1,c2);
}//if
}
该函数执行的功能是什么?
五、算法填空(共8分)
向单链表的末尾添加一个元素的算法。
Void InsertRear(LNode*& HL,const ElemType& item)
{
LNode* newptr;
newptr=new LNode;
If (______________________)
{
cerr<<"Memory allocation failare!"<<endl;
exit(1);
}
________________________=item;
newptr->next=NULL;
if (HL==NULL)
HL=__________________________;
else{
LNode* P=HL;
While (P->next!=NULL)
____________________;
p->next=newptr;
}
}
六、编写算法(共8分)
编写从类型为List的线性表L中将第i个元素删除的算法,(假定不需要对i的值进行
有效性检查,也不用判别L是否为空表。)
void Delete(List& L, int i)
模拟试卷一参考答案
一、单选题(每题2分,共20分)
1.B
2.D
3.A
4.B
5.B
6.C
7.A
数据结构与算法考研真题
8.C
9.B  10.B
二、填空题(每空1分,共26分)
1.顺序链表索引散列
2.O(n)  O(1)
3.p->next=HS;HS=p    HS=HS->next
4.2i  2i+1    i/2(或i/2)
5.向上根
6.2.9
7.邻接矩阵邻接表边集数组
8.1  4
9.O(n)  O(nlog2n)  O(n)
10.m/2-1    m-1    m/2    m
三、运算题(每题6分,共24分)
1.  (1)  3  X  * Y  2  - / 1  +
图3
(2)  2  X  Y  3  +  *  +
2.(1)
1    2    3    4    5    6 7 8 9
(2)见图3所示:
3. (1)不是小根堆。调整为:{12,65,33,70,24,56,48,92,86,33}
(2)是小根堆。
4.普里姆算法从顶点1出发得到最小生成树为:
(1,2)3,  (1,3)5,  (1,4)8,  (4,6)4,  (2,5)10,  (4,7)20
四、阅读算法(每题7分,共14分)
1.30  24  16  10  2  10
2.该函数的功能是:统计出BT所指向的二叉树的结点总数和叶子总数
五、算法填空(共8分,每一空2分)
newptr==NULL    newptr->=data      newptr        p=p->next
六、编写算法(8分)
void Delete(List& L, int i)
{
for(int j=i-1;j<L.size-1; j++)
L.list[j]=L.list[j+1];          //第i个元素的下标为i-1        L.size--;
}
模拟试卷二
一、单选题(每题 2 分,共20分)
1.在一个带有附加表头结点的单链表HL中,若要向表头插入一个由指针p指向的结点,
则执行(  )。
A.  HL=p; p->next=HL;
B. p->next=HL->next; HL->next=p;
C.  p->next=HL; p=HL;
D. p->next=HL; HL=p;
2.若顺序存储的循环队列的QueueMaxSize=n,则该队列最多可存储()个元素.
A. n
B.n-1
C. n+1
D.不确定
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.658          B.648        C.633        D.653
5.下列关于二叉树遍历的叙述中,正确的是(  ) 。
A. 若一个树叶是某二叉树的中序遍历的最后一个结点,则它必是该二叉树的前序遍历最后一个结点
B.若一个点是某二叉树的前序遍历最后一个结点,则它必是该二叉树的中序遍历的最后一个结点
C.若一个结点是某二叉树的中序遍历的最后一个结点,则它必是该二叉树的前序最后一个结点
D.若一个树叶是某二叉树的前序最后一个结点,则它必是该二叉树的中序遍历最后一个结点
6.k层二叉树的结点总数最多为(  ).
A.2k-1      B.2K+1      C.2K-1      D. 2k-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.1        B.2          C.3          D.4
10.下列关于数据结构的叙述中,正确的是(  ).
A.数组是不同类型值的集合
B.递归算法的程序结构比迭代算法的程序结构更为精炼
C.树是一种线性结构
D.用一维数组存储一棵完全二叉树是有效的存储方法