1、 四川大学 《数据结构与算法分析》课程 考试模拟试卷 模拟试卷一 一、 单选题(每题 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;
2、 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的叶子生成一棵哈夫曼
3、树,它的带权路径长度为( )。 E A G C B D F 图1 A. 11 B.35 C. 19 D. 53 以下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
4、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.用邻接表法存储图,占用的存储空间大小与图中边数和结点个数都有关
5、 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. 数据的物理结构被分为_________
6、和___________四种。 2. 对于一个长度为n的顺序存储的线性表,在表头插入元素的时间复杂度为_________,在表尾插入元素的时间复杂度为____________。 3. 向一个由HS指向的链栈中插入一个结点时p时,需要执行的操作是________________;删除一个结点时,需要执行的操作是______________________________(假设栈不空而且无需回收被删除结点)。 4. 对于一棵具有n个结点的二叉树,一个结点的编号为i(1≤i≤n),若它有左孩子则左孩子结点的编号为________,若它有右孩子,则右孩子结
7、点的编号为________,若它有双亲,则双亲结点的编号为________。 5. 当向一个大根堆插入一个具有最大值的元素时,需要逐层_________调整,直到被调整到____________位置为止。 6. 以二分查找方法从长度为10的有序表中查找一个元素时,平均查找长度为________。 7. 表示图的三种常用的存储结构为_____________、____________和_______________。 8. 对于线性表(70,34,55,23,65,41,20)进行散列存储时,若选用H(K)=K %7作为散列函数,则散列地址为0的元素有________个,散列地址为6的有
8、个。 9. 在归并排序中,进行每趟归并的时间复杂度为______,整个排序过程的时间复杂度为____________,空间复杂度为___________。 10. 在一棵m阶B_树上,每个非树根结点的关键字数目最少为________个,最多为________个,其子树数目最少为________,最多为________。 三、 运算题(每题 6 分,共24分) 图2 1. 写出下列中缀表达式的后缀形式: (1) 3X/(Y-2)+1 (2) 2+X*(Y+3) 2. 试对图2中的二叉树画出其: (1) 顺序存储表示的示意图; (2) 二叉链表存储表示的示意图。
9、 3. 判断以下序列是否是小根堆? 如果不是, 将它调整为小根堆。 (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,
10、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]);
11、while(!StackEmpty(S)) cout<
12、
向单链表的末尾添加一个元素的算法。
Void InsertRear(LNode*& HL,const ElemType& item)
{
LNode* newptr;
newptr=new LNode;
If (______________________)
{
cerr<<"Memory allocation failare!"<
13、lse{ 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 二、 填空题(
14、每空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) 图3 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
15、 2 - / 1 + (2) 2 X Y 3 + * + 2. (1) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 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,
16、 (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 17、 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; 18、
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),每个 19、元素占一个空间,问A[2][3](10)存放在什么位置?(脚注(10)表示用10进制表示,m>3)
A.658 B.648 C.633 D.653
5. 下列关于二叉树遍历的叙述中,正确的是( ) 。
A. 若一个树叶是某二叉树的中序遍历的最后一个结点,则它必是该二叉树的前序遍历最后一个结点
B.若一个点是某二叉树的前序遍历最后一个结点,则它必是该二叉树的中序遍历的最后一个结点
C.若一个结点是某二叉树的中序遍历的最后一个结点,则它必是该二叉树的前序最后一个结点
D.若一个树叶是某二叉树的前序最后一个结点,则 20、它必是该二叉树的中序遍历最后一个结点
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) 21、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. 用一维数组存储一棵完全二叉树是有效的存储方法
二、 填空题(每空1分,共26分)
1. 数据的逻辑结构 22、被分为_________、________、__________和___________四种。
2. 一个算法的时间复杂度为(3n3+2000nlog2n+90)/n2,其数量级表示为________。
3. 对于一个长度为n的单链存储的队列,在表头插入元素的时间复杂度为_________,在表尾插入元素的时间复杂度为____________。
4. 假定一棵树的广义表表示为A(D(E,G),H(I,J)),则树中所含的结点数为__________个,树的深度为___________,树的度为_________。
5. 后缀算式79 2 30 + - 4 2 / * 23、的值为__________。中缀算式(3+X*Y)-2Y/3对应的后缀算式为_______________________________。
6. 在一棵高度为5的理想平衡树中,最少含有_______个结点,最多含有_______个结点。
7. 在树中,一个结点的直接后继结点称为该结点的________。一个结点的直接前趋结点称为该结点的________。
8. 在一个具有10个顶点的无向完全图中,包含有________条边,在一个具有n个顶点的有向完全图中,包含有________条边。
9. 假定一个线性表为(12,17,74,5,63,49,82,36),若按Key % 4条件进行 24、划分,使得同一余数的元素成为一个子表,则得到的四个子表分别为____________________________、___________________、_______________________和__________________________。
10. 对一棵B_树进行删除元素的过程中,若最终引起树根结点的合并时,会使新树的高度比原树的高度___________。
11. 在堆排序的过程中,对任一分支结点进行筛运算的时间复杂度为________,整个堆排序过程的时间复杂度为________。
12. 在线性表的散列存储中,装填因子a又称为装填系数,若用m表示散列表的长度, 25、n表示待散列存储的元素的个数,则a等于________。
三、 运算题(每题 6 分,共24分)
1. 在如下数组A中链接存储了一个线性表,表头指针存放在A [ 0].next,试写出该线性表。
A 0 1 2 3 4 5 6 7
data
60
50
78
90
34
40
next
4
0
5
2
7
1
3
2. 已知一棵二叉树的前序遍历的结果是ABKCDFGHIJ, 中序遍历的结果是KBCDAFHIGJ, 试画出这棵二叉树。
3. 已知一个 26、图的顶点集V为: V={1,2,3,4,5,6,7};
其共有10条边。该图用如下边集数组存储:
起点
1
2
2
5
5
2
2
6
1
3
终点
6
4
5
4
7
6
7
7
7
5
权
1
1
2
2
2
3
3
4
5
7
试用克鲁斯卡尔算法依次求出该图的最小生成树中所得到的各条边及权值。
4. 画出向小根堆中加入数据4, 2, 5, 8, 3, 6, 10, 1时,每加入一个数据后堆的变化。
四、 阅读算法(每题7分,共14分)
1. 在下面的每个程序段中,假定线性表La的类型为List,元 27、素类型ElemType为int,并假定每个程序段是连续执行的。试写出每个程序段执行后所得到的线性表La。
(1) InitList(La);
Int a[]={100,26,57,34,79};
For (i=0;i<5;i++)
Insert(La,a[i]);
TraverseList(La);
(2) DeleteFront(La);
InsertRear(La, DeleteFront(La));
TraverseList(La);
(3) ClearList(La);
For (i=0;i<5;i 28、)
InsertFront(La,a[i]);
TraverseList(La);
2. 现面算法的功能是什么?
void ABC(BTNode * BT)
{
if BT {
cout< 29、nt low,int high,KeyType K)
{
if ___________________{
int mid=(low+high)/2;
if (_____________________) return mid; //查找成功,返回元素的下标
else if (K 30、 //在右子表上继续查找
}
else ________________; //查找失败,返回-1
}
六、 编写算法(共8分)
HL为单链表的表头指针,试写出在该单链表中查找具有给定的元素item的算法。
bool Find(LNode* HL, ElemType &item)
模拟试卷二参考答案
一、 单选题(每题2分,共20分)
1.B 2.B 3.A 4.C 5.D 6.A 7.C 8.C 9.D 31、 10.D
二、 填空题(每空1分,共26分)
1. 集合结构 线性结构 树结构 图结构
2. O(n)
3. O(1) O(1)
4. 7 2 2
5. 94 3 X Y * + 2 Y * 3 / -
6. 16 31
7. 孩子(或子)结点 双亲(或父)结点
8. 45 n(n-1)
9. (12,36) (17,5,49) (74,82) (63)
10. 减少1(或减少)
11. O(log2n) O(nlog2n)
12. n/m
三、 运算题(每题6分,共24分)
1. 32、线性表为:(90,40,78,50,34,60)
2. 当前序序列为ABKCDFGHIJ,中序序列为KBCDAFHIGJ时,逐步形成二叉树的过程如下图4所示:
A
A
A
A
F
B
B
F
F
B
G
K
C
G
K
C
HIGJ
CD
K
FHIGJ
H
D
J
HI
J
D
I
KBCD
图4
3. 用克鲁斯卡尔算法得到的最小生成树为:
(1,6)1, (2,4)1, (2,5)2, (5,7)2, (2,6)3, (3,5)7
4. 见图5。
2
2
2
4
4
33、
4
5
5
5
2
4
4
4
2
3
8
8
1
2
2
2
2
5
3
5
5
3
3
5
10
6
4
3
10
4
8
6
4
8
4
8
6
8
图5
四、 阅读算法(每题7分,共14分)
1. (1) La=(26,34,57,79,100)
(2)La=(57,79,100,34)
(3)La=(79,34,57,26,100)
2. 前序遍历链式存储的二叉树。
五、 算法填空(每空2分,共8 分)
(low<=high) K==A[mid].key Binsch(A,mid+1,hight,K) return -1
六、 编写算法(8分)
bool Find(LNode* HL, ElemType &item)
{
LNode* p=HL;
while p
if (p->data==item){
return true;
}
else p=p->next;
return false;
}
9
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818