全国自考数据结构试题课程代码02331资料Word格式文档下载.docx
《全国自考数据结构试题课程代码02331资料Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《全国自考数据结构试题课程代码02331资料Word格式文档下载.docx(10页珍藏版)》请在冰豆网上搜索。
C.(front-rear+m)%mD.(rear-front)%m
5.下列关于顺序栈的叙述中,正确的是
A.入栈操作需要判断栈满,出栈操作需要判断栈空
B.入栈操作不需要判断栈满,出栈操作需要判断栈空
C.入栈操作需要判断栈满,出栈操作不需要判断栈空
D.入栈操作不需要判断栈满,出栈操作不需要判断栈空
6.A是一个10×
10的对称矩阵,若采用行优先的下三角压缩存储,第一个元素a0,0的存储地址为1,每个元素占一个存储单元,则a7,5的地址为
A.25B.26
C.33D.34
7.树的后序遍历等价于该树对应二叉树的
A.层次遍历B.前序遍历
C.中序遍历D.后序遍历
8.使用二叉线索树的目的是便于
A.二叉树中结点的插入与删除B.在二叉树中查找双亲
C.确定二叉树的高度D.查找一个结点的前趋和后继
9.设无向图的顶点个数为n,则该图边的数目最多为
A.n-lB.n(n-1)/2
C.n(n+1)/2D.n2
10.可进行拓扑排序的图只能是
A.有向图B.无向图
C.有向无环图D.无向连通图
11.下列排序方法中稳定的是
A.直接插入排序B.直接选择排序
C.堆排序D.快速排序
12.下列序列不为堆的是
A.75,45,65,30,15,25B.75,65,45,30,25,15
C.75,65,30,l5,25,45D.75,45,65,25,30,15
13.对线性表进行二分查找时,要求线性表必须是
A.顺序存储B.链式存储
C.顺序存储且按关键字有序D.链式存储且按关键字有序
14.分别用以下序列生成二叉排序树,其中三个序列生成的二叉排序树是相同的,不同
的序列是
A.(4,1,2,3,5)B.(4,2,3,l,5)
C.(4,5,2,1,3)D.(4,2,1,5,3)
15.下列关于m阶B树的叙述中,错误的是
A.每个结点至多有m个关键字
B.每个结点至多有m棵子树
C.插入关键字时,通过结点分裂使树高增加
D.删除关键字时通过结点合并使树高降低
非选择题部分
用黑色字迹的签字笔或钢笔将答案写在答题纸上,不能答在试题卷上。
二、填空题(本大题共10小题,每小题2分,共20分)
16.数据元素之间的逻辑关系称为数据的______结构。
17.在线性表中,表的长度定义为______。
18.用S表示入栈操作,X表示出栈操作,若元素入栈的顺序为1、2、3、4,为了得到
1、3、4、2的出栈顺序,相应的S和X的操作序列为______。
19.在二叉树中,带权路径长度最短的树称为______。
20.已知广义表G,head(G)与tail(G)的深度分别为4和6,则G的深度是______。
21.一组字符(a,b,c,d)在文中出现的次数分别为(7,6,3,5),字符'd'的哈夫曼编码的长度为______。
22.在一个具有n个顶点的无向图中,要连通全部顶点至少需要______条边。
23.直接选择排序算法的时间复杂度是______。
24.对于长度为81的表,若采用分块查找,每块的最佳长度为______。
25.用二叉链表保存有n个结点的二叉树,则结点中有______个空指针域。
三、解答题(本大题共4小题,每小题5分,共20分)
26.假设Q是一个具有11个元素存储空间的循环队列(队尾指针指向队尾元素的下一
个位置,队头指针指向队头元素),初始状态Q.front=Q.rear=0;
写出依次执行
下列操作后头、尾指针的当前值。
a,b,c,d,e,f入队,a,b,c,d出队;
(1)Q.front=______;
Q.rear=______。
g,h,i,j,k,l入队,e,f,g,h出队;
(2)Q.front=______;
M,n,o,P入队,i,j,k,l,m出队;
(3)Q.front=______;
27.已知一个无向图如题27图所示,以①为起点,用普里姆(Prim)算法求其最小生成树,画出最小生成树的构造过程。
28.用归并排序法对序列(98,36,-9,0,47,23,1,8)进行排序,问:
(1)一共需要几趟归并可完成排序。
(2)写出第一趟归并后数据的排列次序。
29.一组记录关键字(55,76,44,32,64,82,20,16,43),用散列函数H(key)=key%11将记录
散列到散列表HT[0..12]中去,用线性探测法解决冲突。
(1)画出存入所有记录后的散列表。
(2)求在等概率情况下,查找成功的平均查找长度。
四、算法阅读题(本大题共4小题,每小题5分,共20分)
30.顺序表类型定义如下:
#defineListSize100
typedefstruct{
intdata[ListSize];
intlength;
}SeqList;
阅读下列算法,并回答问题:
voidf30(SeqList*L)
{inti,j;
i=0;
while(i<
L->
length)
if(L->
data[i]%2!
=0)
{for(j=i+1;
j<
length;
j++}
L->
data[j-1]=L->
data[j];
length--;
}
elsei++
(1)若L->
data中的数据为(22,4,63,0,15,29,34,42,3),则执行上述算法后L->
data中的数据以及L->
length的值各是什么?
(2)该算法的功能是什么?
31.有向图的邻接矩阵类型定义如下:
#defineMVN100
∥最大顶点数
typedefintEType;
∥边上权值类型
typedefstruct{
ETypeedges[MVN][MVN];
∥邻接矩阵,即边表
intn;
∥图的顶点数
}MGraph;
∥图类型
例如,一个有向图的邻接矩阵如下所示:
阅读下列算法,并回答问题:
Voidf31(MGraphG)
{
Inti,j,k=0;
Step1:
for(i=0;
i<
G.n;
i++)
for(j=0;
j++)
if(G.edges[i][j]==1)k++;
printf(“%d
n”,k);
step2:
{k=0;
}
(1)stepl到step2之间的二重循环语句的功能是什么?
(2)step2之后的二重循环语句的功能是什么?
32.阅读下列算法,并回答问题:
voidf32(intr[],intn)
{
Inti,j;
for(i=2;
i<
n;
i++)
{r[0]=r[i];
j=i-l;
while(r[0]<
r[j])
{r[j+l]=r[j];
j=j-1;
r[j+l]=r[0];
}
(1)这是哪一种插入排序算法?
该算法是否稳定?
(2)设置r[0]的作用是什么?
33.顺序表类型定义如下:
typedefintSeqList[100];
voidf33(SeqListr,intn)
{inta,b,i;
if(r[0]<
r[1])
{a=r[0];
b=r[1];
>
else{a=r[1];
b=r[0];
if(r[i]<
a)a=r[i];
elseif(r[i]>
b)b=r[i];
printf("a=%d,b=%d。
n",a,b);
(1)给出该算法的功能;
(2)给出该算法的时间复杂度。
五、算法设计题(本题10分)
34.二叉树的存储结构类型定义如下
typedefstructnode{
intdata;
structnode*lchild,*rchild;
}BinNode;
typedefBinNode*BinTree;
编写递归算法,求只有一个孩子结点的结点总数,并计算这些结点的数据值的和。
函数的原型为:
voidf34(BinTreeT,int*count,int
*sum)
*count和*sum的初值为0。
一、单项选择题
1.(
B
)
2.(
D
)3.(
A
)4.(
)5.(
)6.(
C
)7.(
)8.(
)9.(
)
10.(
)11.(
)12.(
)13.(
14.(
)15.(
)
二、填空题(本大题共10小题,每空2分,共20分)
16.存储结构
17.q=p->
pre;
q->
pre->
next=p;
p->
pre=q->
free(q);
18.栈空
19."
DEFG"
//注意双引号不能少
20.表尾
21.2^(I-2)+M/2叶子结点.
22.入度
23.基数
24.同义词
25.已有m个同义词记录
26.
(1)quelen==m
(2)quelen==0
(3)(13-19+40)%40=34
(4)(rear-quelen+m)%m
27.
B
/
\
F
/\
E
G
/
C
D
28.3个:
a、bce、dfg
29.
我们知道,对n个关键自序列进行一趟快速排序,要进行n-1次比较,
也就是基准和其他n-1个关键字比较。
这里要求10次,而7-1+2*(3-1)=10,这就要求2趟快速排序后,算法结束。
所以,列举出来的序列,要求在做partition的时候,正好将序列平分
(1)4132657
或4137652
或4537612
或4135627.......
(2)自己列吧:
30.
(1)L=(3,7,11,14,15,20,51)
(2)L=(4,7,14,20,51)
(3)在顺序表L中查找数x,
找到,则删除x,
没找到,则在适当的位置插入x,插入后,L依然有序.
31.
(1)FALSE//初始化为未访问
(2)DSFTree(G,p->
adjvex);
//从相邻结点往下继续深度搜索
(3)p=p->
next;
//下一个未访问的相邻结点
32.
(1)L={0,1,2,3,4,5,6,7};
(2)5次
33.
(1)NULL
//初始化
(2)p->
next=H[j]//和下面一句完成头插法
(3)p=q;
//继续遍历L
五、算法设计题(本大题10分)
34.
1)
a)*px有右孩子,则其右孩子为其中序序列中的后继
b)*px无右孩子,从*px开始回溯其祖先结点,找到第1个身份为左孩子的结点,
找到,则该结点的父结点为*px的中序序列中的后继。
找不到,则无后继。
2)
BinTNode*fintNext(BinTNode*px)
if(px->
rchild)returnpx->
rchild;
//*px有右孩子
BinTNode*q,*qp;
q=px;
while(qp=q->
parent){//未回溯到根结点
if(qp->
lchild==q)returnqp;
//找到1)b)所述结点
q=qp;
//往上回溯
returnNULL;
//未找到