1、全国2021年1月高等教育自学考试 数据构造试题 〔课程代码:02331〕 一、单项选择题〔本大题共15小题,每题2分,共30分〕 在每题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多项选择或未选均无分。 1.以下选项中与数据存储构造无关的术语是〔 〕 2.将两个各有n个元素的有序表归并成一个有序表,最少的比拟次数是〔 〕 3.循环队列的存储空间大小为m,队头指针front指向队头元素,队尾指针rear指向队尾元素的下一个位置,那么向队列中插入新元素时,修改指针的操作是〔 〕 A.rear=(rear-1)%m;
2、 B.front=(front+1)%m; C.front=(front-1)%m; D.rear=(rear+1)%m; 4.递归实现或函数调用时,处理参数及返回地址,应采用的数据构造是〔 〕 5.设有两个串p与q,其中q是p的子串,那么求q在p中首次出现位置的算法称为〔 〕 6.对于广义表A,假设head(A)等于tail(A),那么表A为〔 〕 A.( ) B.(( )) C.(( ),( )) D.(( ),( ),( )) 7.假设一棵具有n(n>0)个结点的二叉树的先序序列与后序序列正好相反,那么该二叉树一定是 8.假设一棵二叉树中度为
3、l的结点个数是3,度为2的结点个数是4,那么该二叉树叶子结点的个数是〔 〕
9.以下表达中错误的选项是〔 〕
10.有向图G=(V,E),其中V={V1,V2,V3,V4},E={
4、关键字序列是〔 〕 A.(18,22,30,46,51,68,75,83) B.(30,18,22,46,51,75,83,68) C.(46,30,22,18,51,75,68,83) D.(30,22,18,46,51,75,68,83) 13.某索引顺序表共有元素395个,平均分成5块。假设先对索引表采用顺序查找,再对块中元素进展顺序查找,那么在等概率情况下,分块查找成功的平均查找长度是〔 〕 14.在含有10个关键字的3阶B-树中进展查找,至多访问的结点个数为〔 〕 15.ISAM文件系统中采用多级索引的目的是〔 〕 二、填空题〔本大
5、题共10小题,每题2分,共20分〕 请在每题的空格中填上正确答案。错填、不填均无分。 16.数据构造由数据的逻辑构造、存储构造与数据的____________三局部组成。 17.在单链表中某结点后插入一个新结点,需要修改_______________个结点指针域的值。 18.设栈S的初始状态为空,假设元素a、b、c、d、e、f依次进栈,得到的出栈序列是b、d、c、f、e、a,那么栈S的容量至少是________________。 19.长度为零的串称为________________。 20.广义表G=(a,b,(c,d,(e,f)),G)的长度为________________。
6、 21.一棵树T采用孩子兄弟链表存储,如果树T中某个结点为叶子结点,那么该结点在二叉链表中所对应的结点一定是________________。 22.一个有n个顶点的无向连通图,最少有________________条边。 23.当待排关键字序列根本有序时,快速排序、简单项选择择排序与直接插入排序三种排序方法中,运行效率最高的是________________。 24.在一棵深度为h的具有n个结点的二叉排序树中,查找任一结点的最多比拟次数是______________。 25.不定长文件指的是文件的____________大小不固定。 三、解答题〔本大题共4小题,每题5分,共20分
7、〕 26.一棵二叉排序树〔结点值大小按字母顺序〕的前序遍历序列为EBACDFHG, 请答复以下问题: (1)画出此二叉排序树; (2)假设将此二叉排序树看作森林的二叉链表存储,请画出对应的森林。 27.有向图的邻接表如下图,请答复下面问题: (1)给出该图的邻接矩阵; (2)从结点A出发,写出该图的深度优先遍历序列。 28.待排记录的关键字序列为{25,96,11,63,57,78,44},请答复以下问题: (1)画出堆排序的初始堆〔大根堆〕; (2)画出第二次重建堆之后的堆。 29.关键字序列为(56,23,41,79,38,62,18),用散列函数H(key)=key
8、11将其散列到散列表HT[0..10]中,采用线性探测法处理冲突。请答复以下问题:
(1)画出散列存储后的散列表:
(2)求在等概率情况下查找成功的平均查找长度。
四、算法阅读题〔本大题共4小题,每题5分,共20分〕
30.阅读以下程序。
void f30(int A[], int n)
int i,j,m;
for (i=1;i 9、A,3)后矩阵B的值;
(2)简述函数f30的功能。
31.假设以二叉链表表示二叉树,其类型定义如下:
typedef struct node {
char data;
struct node*Ichild, *rchild; ∥左右孩子指针
} *BinTree;
阅读以下程序。
void f31(BinTree T)
InitStack(S); ∥ 初始化一个堆栈S
while (T || !StackEmpty(S)
while (T)
Push(S,T); T=T->lchild;
if (!StackEmpty(S))
10、T=Pop(S); printf(“%c〞,T->data); T=T->rchild;
答复以下问题:
(1)以T为根指针的二叉树如下图,请写出执行f31(T)的输出结果:(2)简述算法f31的功能。
32.阅读以下程序。
void f32(int A[],int n)
int i,j,m=l,t;
for (i=0; i 11、
t=A[j-l];
A[j-1]=A[j];
A[j]=t;
m=1;
答复以下问题:
整型数组A[ ]={34,26,15,89,42},写出执行函数调用f32(A,5)后的输出结果。
33.顺序表的表构造定义如下:
#define MAXLEN 100
typedef int KeyType;
typedef struct {
KeyType key;
InfoType otherinfo;
} NodeType;
typedef NodeType SqList[MAXLEN];
阅读以下程序。
Int f33(SqList R,NodeType 12、X, int p, int q)
{ int m;
if (p>q) return -1;
m=(p+q)/2;
if (R[m].key==X.key) return m;
if (R[m].key>X.key) return f33(R,X,p,m-l);
else return f33(R,X,m+l,q);
请答复以下问题:
(1)假设有序的顺序表R的关键字序列为(2,5,13,26,55,80,105),分别写出X.key=18与X.key=26时,执行函数调用f33(R,X,0,6)的函数返回值。
(2)简述算法f33的功能。
五、 13、算法设计题〔此题10分〕
34.假设用带头结点的单循环链表表示线性表,单链表的类型定义如下:
typedef struct node {
int data;
struct node*next;
}LinkNode,*LinkList;
编写程序,求头指针为head的单循环链表中data域值为正整数的结点个数占结点总数的比例,假设为空表输出0,并给出所写算法的时间复杂度。函数原型为:
float f34(LinkList head):
全国2021年1月高等教育自学考试
数据构造试题答案
〔课程代码:02331〕
一、单项选择题〔本大题共15小题,每题2分,共30分〕
14、
1. D 2. B 3. D 4. A 5. C 6. B 7. C 8. B 9. C 10. A
11. C 12. D 13. A 14. B 15. A
二、填空题〔本大题共10小题,每题2分,共20分〕
16.运算〔或操作〕
17. 2
18. 3
19.空串
20. 4
21.左子树为空
22.n-l
23.直接插入排序
24.h
25.记录
三、解答题〔本大题共4小题,每题5分,共20分〕
26.(1)
【评分参考】错1个结点扣1分,扣完3分为止。
(2)
〔2分〕
【评分参考】错1棵树扣1分,扣完2分为止。
27.(1) 〔3分〕
【 15、评分参考】错1个数字扣1分,扣完3分为止。
(2) ABCED 〔2分〕
【评分参考】错1个字符扣1分,扣完2分为止。
28.(1)f96,63,78,25,57,11,4}〔亦可画出对应的堆形式。〕 〔3分〕
【评分参考】错1个关键字位置扣1分,扣完3分为止。
(2)f63,57,44,25,1l,78,96)〔亦可画出对应的堆形式。〕 〔2分〕
【评分参考】错1个关键字位置扣1分,扣完2分为止。
29.(1)
【评分参考】错1个关键字位置扣1分,扣完4分为止。
(2) ASL=11/7 〔1分〕
四、算法阅读题〔本大题共4小题,每 16、题5分,共20分〕
30.(1)〔3分〕
【评分参考】错1个数字扣1分,扣完3分为止。
(2)算法功能是求矩阵的转置 〔2分〕
31.(1) CBEDFAGH 〔4分〕
【评分参考】错1个结点位置扣1分,扣完4分为止。
(2)中序遍历二叉树 〔1分〕
32.输出结果:
34 26 15 89 42 〔1分〕
26 15 34 42 89 〔2分〕
15 26 34 42 89 〔2分〕
33.(1)-1 〔2分〕
3 〔2分〕
(2)算法功能是二分查找给定的 17、关键字,假设存在那么返回关键字在表中的位置〔或下标〕,否那么返回-1。 〔1分〕
五、算法设计题〔此题10分〕
34.参考答案:
float f34 (LinkList head)
LinkNode *p=head->next;
int m=0,n=0; 〔赋初值2分〕
while( p!=head) 〔循环条件1分〕
m++;
if (p->data>0) n++’ 〔结点计数2分〕
pp->next; 〔修改指针1分〕
if(m)retum (float)n/m;
else retum O; 〔计算返回值2分〕
时间复杂度为O(n)。 〔2分〕
说明:假设用其他方法实现该功能,清参照此评分标准给分。
第 11 页






