数据结构考试题7_精品文档Word文档格式.doc
《数据结构考试题7_精品文档Word文档格式.doc》由会员分享,可在线阅读,更多相关《数据结构考试题7_精品文档Word文档格式.doc(6页珍藏版)》请在冰豆网上搜索。
2)的存储形式?
A.双亲表示法B.孩子链表表示法C.孩子兄弟表示法D.顺序存储表示法
8.下面算法适合用于构造一个稠密图的最小生成树。
A.Dijkstra算法 B.Prim算法
C.Floyd算法 D.Kruskal算法
9.方法可以判断一个有向图是否存在回路。
A.求最小生成树 B.拓扑排序
C.求关键路径 D.求最短路径
10.已知图G的邻接表如图1所示,则从顶点V0出发进行深度优先遍历的结果是________。
图1图G的邻接表
A.0,1,2,3,4 B.0,1,2,4,3
C.0,1,3,4,2 D.0,1,4,2,3
11.二分查找和二叉排序树查找的时间性能。
A.相同 B.有时不同
C.完全不同 D.数量级都是O(log2n)
12.关于m阶B-树说法错误的是。
A.m阶B-树是一棵平衡的m叉树
B.B-树中的查找无论是否成功都必须找到最下层结点
C.根结点最多含有m棵子树
D.根结点至少含有2棵子树
13.时间复杂度恒为O(nlog2n)且不受数据初始状态影响的排序算法是()。
A.归并排序B.希尔排序C.快速排序D.简单选择排序
14.有一种排序方法,它每一趟都将未排序序列中的一个元素,插入到已排序序列的合适位置,该排序方法是()。
A.堆排序 B.冒泡排序
C.直接插入排序 D.简单选择排序
15.堆的形状是一棵_______。
A.满二叉树B.二叉判定树C.平衡二叉树D.完全二叉树
二、问答题(共计45分)
1.有以下算法,分析执行fun(a,n,0)的时间复杂度。
需要推导过程。
(7分)
voidfun(inta[],intn,intk){//数组a共有n个元素
1if(k==n-1){
2for(inti=0;
i<
n;
i++)
3printf(“%d\n”,a[i];
4}
5else{
6for(inti=k;
i++)
7a[i]=a[i]+i*i;
8fun(a,n,k+1);
9}
2.已知某二叉树的中序和后序遍历序列分别为BFDJGACHKEI和FJGDBKHIECA,请画出该二叉树,并给出该二叉树的先序遍历序列。
(8分)
3.对于图2所示的带权有向图,若采用Dijkstra算法求从顶点a到其他顶点的最短路径和长度,第一条最短路径为:
a->
c,路径长度2,则求得的剩余最短路径依次是什么?
(请按Dijkstra算法执行时产生最短路径的顺序,给出各最短路径及其长度)。
(10分)
图2一个有向图
4.设有一组关键字{32,13,49,24,38,21,4,12},其哈希函数为:
H(key)=key%7,采用开放地址法的线性探查法解决冲突,试在0~9的哈希地址空间中对该关键字序列构造哈希表,并求等概率下查找成功和查找失败的平均查找长度。
5.有一组关键字序列{66,89,8,123,9,44,55,37,200,127,98}:
(1)请将其调整成初始大根堆,并画出初始大根堆的树型表示。
(5分)
(2)采用堆排序实现按关键字递增排序,请画出当有1个最大的关键字已放置到最终位置时,剩余关键字构成的大根堆。
三、算法设计题(共计25分)
1.若一元稀疏多项式采用有序单链表进行存储,请给出一元稀疏多项式的存储结构,并基于此存储结构设计一个算法用于判断两个一元稀疏多项式是否相等。
2.假设二叉排序树采用中序线索链表作为存储结构进行存储,请写出该线索链表的存储结构,并编写算法输出该二叉排序树中所有值在a,b之间的关键字,其中a<
b,二叉排序树左子树结点的值小于根结点的值,右子树结点的值大于根结点的值,树中没有关键字相重的结点。
(15分)
“数据结构”考试试题(A)参考答案
一、单项选择题(每小题2分,共30分)
1~5. CDDCA
6~10. ADBBA
11~15. BBACD
二、问答题(共45分)
1.设fun(a,n,k)的执行时间为T1(n,k),则fun(a,n,0)的执行时间为T(n)=T1(n,0)。
由fun()算法可知:
则T(n)=T1(n,0)=n+T1(n,1)=n+(n-1)+T1(n,2)
=…=n+(n-1)+…+2+T1(n,n-1)
=+n=O(n2)
评分说明:
过程5分,答案2分。
只有正确结果,给2分。
2.二叉树如下图所示:
6分
先序遍历序列为:
ABDFGJCEHKI2分
3.第二条:
c->
f,长度为62分
第三条:
e,长度为102分
第四条:
f->
d,长度为112分
第五条:
d->
g,长度为142分
第六条:
b,长度为152分
4.
key
32
13
49
24
38
21
4
12
H(key)
6
3
5
最终地址
1
7
8
计算次数
2
哈希表如下:
6分
9
ASL成功=(1+1+1+1+3+2+4+4)/8=17/82分
ASL失败=(3+2+1+7+6+5+4)/7=42分
4.
(1)初始大根堆:
5分
(2)1个元素放入其最终位置后,剩余元素构成的大根堆:
5分
三、算法设计题(25分)
1.一元稀疏多项式采用带头结点的有序单链表进行存储,结点的存储结构如下:
3分
typedefstructnode{
intcoef;
//系数
intexpn;
//指数
structnode*next;
}PNode;
算法如下:
7分
voidcompare(PNode*P1,PNode*P2){
//多项式按指数递增的顺序进行存储
PNode*P,*Q;
P=P1->
next;
Q=P2->
while(P!
=NULL&
&
Q!
=NULL){
if(P->
expn==Q->
expn&
P->
coef==Q->
coef){
P=P->
Q=Q->
}
else{
printf(“多项式不匹配!
\n”);
return;
}
if(P||Q)
printf(“多项式不匹配!
printf(“多项式匹配!
return;
}
2.解:
二叉排序树的结点定义如下:
3分
typedefstructNode{
intdata;
structNode*lchild,*rchild;
//左右孩子指针
intLTag,RTag;
//左右标志,0表示孩子,1表示线索
}BSTNode;
12分
voidreport(BSTNode*T,inta,intb){
p=T->
lchild;
//p指向根结点
while(p!
=T){//空树或遍历结束时,p==T
while(p->
LTag==0)p=p->
//寻找第一个结点
if(p->
data>
a&
p->
data<
b)
printf(“%d\n”,p->
data);
RTag==1&
rchild!
=T){
p=p->
rchild;
if(p->
b)return;
//结点的值大于b,算法结束