全国自考数据结构10真题答案.docx
《全国自考数据结构10真题答案.docx》由会员分享,可在线阅读,更多相关《全国自考数据结构10真题答案.docx(10页珍藏版)》请在冰豆网上搜索。
全国自考数据结构10真题答案
全国2014年10月高等教育自学考试
数据结构试题
课程代码:
02331
请考生按规定用笔将所有试题的答案涂、写在答题纸上。
选择题部分
注意事项·
1·答题前,考生务必将自己的考试课程名称、姓名、准考证号用黑色字迹的签字笔或钢笔填写在答题纸规定的位置上。
2·每小题选出答案后,用2B铅笔把答题纸上对应题目的答案标号涂黑。
如需改动,用橡皮擦干净后,再选涂其他答案标号。
不能答在试题卷上。
、单项选择题(本大题共巧小题,每小题2分,共30分)
在每小题列出的四个备选项中只有一个是符合题目要求的,请将其选出并将“答题纸”的相应代码涂黑。
错涂、多涂或未涂均无分。
1·下列选项中,属于逻辑结构的是
A.线性表B.链表c.顺序栈D.循环队列
2·下列关于算法输出的叙述中,正确的是
A.算法一定没有输出B.算法可以没有输出
C.算法至少有一个输出D.算法必须有多个输出
3·针对线性表逻辑上相邻的两个元素,下列叙述中,正确的是
A.采用顺序存储时一定相邻,采用链式存储时也一定相邻
B.采用顺序存储时一定相邻,采用链式存储时不一定相邻
C.采用顺序存储时不一定相邻,采用链式存储时一定相邻
D.采用顺序存储时不一定相邻,采用链式存储时也不一定相邻
4·队列和栈的特征分别是
A.先进先出,先进后出
C.先进后出,先进先出
B.先进先出,先进出
D.先进后出,先进出
5·在二维数组a[8]卩0]中,每个数组元素a[i][j]占用3个存储空间,所有数组元素存放在一个连续的存储空间中,则该数组需要的存储空间个数是
A.80B.100C.240D.270
6·广义表A=(a,(b,c,(e,f,g,h)))的表长是
A.2B.3C.4D.7
7·设深度为k(k>=1)的二叉树中只有度为0和度为2的结点,则该二叉树中所包含的结点数至少是
A.k+lB.2k+1C.2k一1D.2k
8·下列选项中,可以唯一确定一棵二叉树的两种遍历序列是
A.前序遍历序列和中序遍历序列B·前序遍历序列和后序遍历序列
C.前序遍历序列和层次遍历序列D.后序遍历序列和层次遍历序列
解析:
已知一棵二叉树的前序和中序遍历序列或中序和后序遍历序列,可唯一地确定一棵二叉树
9·下列关于无向连通图特性的叙述中,正确的是
A.边数大于顶点个数减1
B.所有顶点的度之和为偶数
C.度为1的顶点个数一定为偶数
D.度为1的顶点个数一定为奇数
10·下列关于无向图广度优先搜索序列的叙述中,正确的是
A.广度优先搜索序列只有一种
B.广度优先搜索序列可能不存在
C.广度优先搜索序列可能有多种
D.广度优先搜索序列一定有多种
11.设带权连通图G中含有n(n>l)个顶点e条边。
下列关于G的最小生成树的叙述中,正确的是
A.生成树中一定含有权值最小的e条边
B.生成树中可能含有权值最小的n+l条边
c.生成树中一定含有权值最小的n条边
D.生成树中可能含有权值最小的n-l条边
12·下列排序方法中,时间复杂度与数据初始状态相关的是
A.直接选择排序B.快速排序
C.基数排序D.箱排序
13·下列排序方法中,效率较高且稳定的方法是
A.直接插入排序B.冒泡排序
C.快速排序D.归并排序
14·下列叙述中,不符合m阶B树定义的是
A.根结点最多有m棵子树
B.所有叶结点都在同一层上
C.各结点内关键字均升序或降序排列
D.叶结点之间通过指针链接
15.·假设散列表长m:
Il,散列函数H(key)=key%llo表中己有4个结点:
H(39):
6,H(41):
8,H(53):
9,H(76):
10,占了4个位置,其余位置为空。
现采用线性探查法处理冲突,存储关键字85时需要探查的次数是
A.2B.3C.4D.5
非选择题部分
二、填空题
16·著名计算机科学家沃思曾指出:
算法+数据结构=程序。
17·描述算法占用内存空间效率的术语是空间复杂度
18·设顺序表第1个元素的存储地址是2000,每个数据元素占4个字节,则第41个元素的存储地址是2160
19·栈和队列是操作受限的线性表,其中只能在表的一端进行插入或删除操作的栈
20·广义表A=(a,(b,c,(e,f,g,h))),tail(A)=((b,c,(e,f,g,h)))
21.一棵左子树为空的二叉树在中序线索化后,其空指针域的个数为2
22·除邻接表外,图的另一种链式存储方式是逆邻接表
23·含n个顶点e条边的带权连通图G,采用迪杰斯特拉算法得到的某个给定顶点到其余各顶点最短路径的条数是n-1
24·DFS算法的中文名称是深度优先搜索
25·若构造一棵具有n个结点的二叉排序树,在最坏情况下,其深度为n
三、解答题
26·设Q是有N个存储空间的循环队列,初始状态front=rear=0,约定指针rear指向的单元始终为空,回答下列问题。
(1)写出数据元素x入队的语句序列:
if((rear+1)%N==front)
printf(“Queueoverflow”);
else{
Q[rear]=X;
rear=(rear+1)%N;
}
(2)写出队首元素出保存到变量序
If(rear==front)
Printf(“Queueempty”);
Else{
Y=Q[front];
Front=(front+1)%N;
}
(3)给出计算队列长度L的表达式
(N+rear-front)%N
27·已知稀疏矩阵M如下,采用三元组表存储。
M5*7
0300000
0000080
2000000
00-20000
-1000007
(1)给出三元组表的类型定义。
#defineMAX35
typedefstruct{
inti,j;
intv;
}TriTupleNode;
Typedefstruct{
TriTupleNodedata[MAX];
intm,n,t;
}TSMatrix;
(2)画出矩阵M按行优先的三元组表。
i
j
v
0
0
1
3
1
1
5
8
2
2
0
2
3
3
2
-2
4
4
0
-1
5
4
6
7
28.·将百分制成绩分成五个等级,己知成绩的对应关系及分布情况如下表所示:
百分制成绩s
o~59
60~69
70、79
80~89
90、100
等级grade
不及格
及格
中等
良好
优秀
百分比
5
25
请根据最优二叉树的基本原理,采用类c语言,描述你所设计的成绩判定过程。
If(70<=s&&s<=79)grade=”中等”
Elseif(80<=s&&s<=89)grade=”良好”
Elseif(60<=s&&s<=69)grade=”及格”
Elseif(s>=90)grade=”优秀”
Elsegrade=”不及格”
29·给定有向无环图G如题29图所示,写出G的5种不同的拓扑排序序列。
1、1,2,3,4,5,6,7,8
2、1,2,3,5,4,6,7,8
3、1,2,3,4,5,7,6,8,
4、1,2,3,5,4,7,6,8,
5、1,3,2,5,4,6,7,8
四、算法阅读题(本大题共4小题,每小题5分,共20分)30·请写出下列程序段的输出结果。
SeqStackS;//初始化栈scharx,y;
Push(s,x);
Push(s,x);
Push(s,y);
x:
Pop(s);
Push(s,'E');Push(s,x);x:
Pop(S);Push(s,'H');while(!
StackEmpty(s)){
y:
Pop(s);putchar(y);
putchar(x);
输出结果:
HELLO
31·带头结点的单链表定义如下,其中freq域记录本结点被访问的次数,初值为0,单
链表始终以freq值从大到小有序。
函数引完成的功能是:
查找给定关键字所在结点,若查找成功,则该结点的freq域加1,并按freq值调整结点位置。
请在答题纸上填上适当内容将算法补充完整。
typedefintKeyType;typedefsü•uctnode{KeyTypekey;intfreq;structnode*next;
}RecType,*LinkList;
LinkListB1(LlnkListH,KeyTypeK)
{LinkListp:
H,q;while(p->next&&p->next->key!
:
K)
p=p->next;if(p->next一NULL)returnNULL;//查找不成功
if(p->freqnext->freq)//调整结点位置
{q:
p->next;//取下该结点
p->next=q->next;
//找到合适位置并插入while(p->next->freq>q->freq)
(2)
q->next=p->next;
(3)
returnq;
<1>、p->next->freq++
<2>、p=p->next
<3>、p->next=q
32·阅读程序,回答下列问题。
typedefintKeyType;typedefstruct{
KeyTypekey;
InfoTypeotherinfo;}RecType;typedefRecTypeSeqList[MAXSIZE+1];
<1>、8,41,75,24,16,82
8,16,41,24,75,82
8,16,24,41,75,82
<2>、冒泡排序
<1>Bt!
=NULL
<2>f33(Bt->rchild)
<3>Bt->rchild
<4>p
List_ptrInvertList(List_ptrhead)
{
List_ptrmiddle,p;
middle=head->next;
head->next=NULL;
while(middle!
=NULL){
p=middle;
middle=middle->next;
p->next=head->next;
head->next=p;
}
returnhead;
}