文档库 最新最全的文档下载
当前位置:文档库 › 2020年10月全国自考数据结构试题及答案解析.doc

2020年10月全国自考数据结构试题及答案解析.doc

2020年10月全国自考数据结构试题及答案解析.doc
2020年10月全国自考数据结构试题及答案解析.doc

??????????????????????精品自学考料推荐??????????????????

全国 2018 年 10 月高等教育自学考试

数据结构试题

课程代码: 02331

一、单项选择题(本大题共15 小题,每小题 2 分,共 30 分)

在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选

均无分。

1.数据结构是()

A.一种数据类型

B.数据的存储结构

C.一组性质相同的数据元素的集合

D.相互之间存在一种或多种特定关系的数据元素的集合

2.算法分析的目的是()

A.辨别数据结构的合理性

B.评价算法的效率

C.研究算法中输入与输出的关系

D.鉴别算法的可读性

3.在线性表的下列运算中,不.改变数据元素之间结构关系的运算是()

A .插入

B .删除

C.排序 D .定位

4.若进栈序列为 1, 2, 3,4, 5, 6,且进栈和出栈可以穿插进行,则可能出现的出栈序列为()

A . 3,2, 6, 1, 4, 5

B .3, 4, 2,1, 6, 5

C. 1, 2, 5, 3,4, 6 D .5, 6, 4, 2, 3,1

5.设串 sl=″ Data Structures with Java ″ ,s2=″it ″,则子串定位函数index(s1,s2)的值为

()A . 15 B .16

C. 17 D .18

6.二维数组 A[8][9] 按行优先顺序存储,若数组元素A[2][3] 的存储地址为 1087,A[4][7] 的存储地址为1153,则数组元素 A[6][7] 的存储地址为()

A . 1207

B .1209

1

C. 1211 D .1213

7.在按层次遍历二叉树的算法中,需要借助的辅助数据结构是()

A .队列

B .栈

C.线性表 D .有序表

8.在任意一棵二叉树的前序序列和后序序列中,各叶子之间的相对次序关系()

A .不一定相同

B .都相同

C.都不相同 D .互为逆序

9.若采用孩子兄弟链表作为树的存储结构,则树的后序遍历应采用二叉树的()

A .层次遍历算法

B .前序遍历算法

C.中序遍历算法 D .后序遍历算法

10.若用邻接矩阵表示一个有向图,则其中每一列包含的″1″的个数为()

A .图中每个顶点的入度

B .图中每个顶点的出度

C.图中弧的条数 D .图中连通分量的数目

11.图的邻接矩阵表示法适用于表示()

A .无向图

B .有向图

C.稠密图 D .稀疏图

12.在对n 个关键字进行直接选择排序的过程中,每一趟都要从无序区选出最小关键字元素,则在进行第i 趟排序之前,无序区中关键字元素的个数为()

A . i

B .i+1

C. n-i D .n-i+1

13.下列排序算法中,其时间复杂度和记录的初始排列无关的是()

A .插入排序

B .堆排序

C.快速排序 D .冒泡排序

14.若有序表的关键字序列为(b,c,d,e,f,g,q,r,s,t),则在二分查找关键字 b 的过程中,先后进行比较的关键字依次为()

A . f,c,b

B .f,d,b

C. g,c,b D .g,d,b

15.若在文件中查询年龄在60 岁以上的男性及年龄在55 岁以上的女性的所有记录,则查询条件为()

A .(性别 =“男”) OR(年龄 > 60)OR (性别 =“女”) OR(年龄 >55)

B .(性别 =“男”) OR(年龄 > 60)AND (性别 =“女”) OR(年龄 >55 )

C.(性别 =“男”) AND( 年龄 > 60)OR (性别 =“女”) AND (年龄 >55 )

2

D .(性别 =“男”) AND( 年龄 > 60)AND (性别 =“女”)AND (年龄 >55)

二、填空题(本大题共10 小题,每小题 2 分,共 20 分)

请在每小题的空格中填上正确答案。错填、不填均无分。

16.称算法的时间复杂度为O(f(n)) ,其含义是指算法的执行时间和_______的数量级相同。

17.在一个长度为n 的单链表L 中,删除链表中*p 的前驱结点的时间复杂度为_________。

18.假设为循环队列分配的向量空间为Q[20] ,若队列的长度和队头指针值分别为13 和 17,则当前尾指针的值为______ 。

19.设 s=″ I AM A ATHLETE ″ ,t=″ GOOD ″,则执行下列串操作序列之后得到的sub1 为________。

substr (sub1,s,5,2); substr(sub2,s,6,8); strcpy(t1,t);

strcat(t1,sub2); strcat(sub1,t1);

20.广义表的深度是指_______。

21.一棵含999 个结点的完全二叉树的深度为_______。

22.含 n 个顶点的无向连通图中至少含有______条边。

23.对表长为9000 的索引顺序表进行分块查找,假设每一块的长度均为15,且以顺序查找确定块,则在各记录的查找概率均相等的情况下,其查找成功的平均查找长度为_____。

24.若对关键字序列( 43, 02, 80, 48,26, 57,15, 73, 21, 24, 66)进行一趟增量为 3 的希尔排序,则得到的结果为 ______。

25. ISAM 文件由主索引、______、 ______和主文件组成。

三、解答题(本大题共 4 小题,每小题 5 分,共 20 分)

26.某广义表的表头和表尾均为(a,(b,c)),画出该广义表的图形表示。

27.已知二叉树的先序序列和中序序列分别为HDACBGFE和ADCBHFEG。

(1)画出该二叉树;

(2)画出与( 1)求得的二叉树对应的森林。

(1)

(2)

28.已知带权图的邻接表如下所示,其中边表结点的结构为:

3

依此邻接表从顶点 C 出发进行深度优先遍历。

(1)画出由此得到的深度优先生成树;

(2)写出遍历过程中得到的从顶点C 到其它各顶点的带权路径及其长度。

(1)

(2)

29.从空树起,依次插入关键字37, 50, 42, 18, 48, 12, 56, 30, 23,构造一棵二叉排序树。

( 1)画出该二叉排序树;

( 2)画出从( 1)所得树中删除关键字为37 的结点之后的二叉排序树。

(1)

(2)

四、算法阅读题(本大题共 4 小题,每小题 5 分,共 20 分)

30.已知用有序链表存储整数集合的元素。阅读算法f30,并回答下列问题:

( 1)写出执行f30( a,b)的返回值,其中 a 和 b 分别为指向存储集合{2 , 4, 5,7, 9, 12} 和 {2 , 4, 5, 7, 9} 的链表的头指针;

(2)简述算法 f30 的功能;

(3)写出算法 f30 的时间复杂度。

int f30(LinkList ha,LinkList hb)

{

//LinkList是带有头结点的单链表

//ha 和 hb 分别为指向存储两个有序整数集合的链表的头指针

LinkList pa,pb;

pa=ha->next;

pb=hb->next;

while(pa && pb && pa->data==pb->data)

{ pa=pa->next;

4

pb=pb->next;

}

if(pa==NULL && pb==NULL) return 1;

else return 0;

}

(1)

(2)

(3)

31.已知稀疏矩阵采用带行表的三元组表表示,其形式说明如下:

#define MaxRow100//稀疏矩阵的最大行数

typedef struct {

int i,j,v;//行号、列号、元素值

}TriTupleNode;

typedef struct{

TriTupleNode data[MaxSize];

int RowTab[MaxRow+1];//行表

int m,n,t;//矩阵的行数、列数和非零元个数

}RTriTupleTable;

下列算法f31 的功能是,以行优先的顺序输入稀疏矩阵的非零元(行号、列号、元素值),建立稀疏矩阵的带行表的三元组表存储结构。请在空缺处填入合适内容,使其成为一个完整的算法。(注:矩阵的行、列下标均从 1 起计)

void f31(RTriTupleTable *R)

{ int i,k;

scanf(″ %d %d %d ″ ,&R->m,&R->n,&R->t);

R->RowTab[1]=0;

k=1;//k 指示当前输入的非零元的行号

for(i=0;①;i++)

{ scanf(″ %d %d %d ″ ,②,③,&R->data[i].v);

while(kdata[i].i)

{④;

R->RowTab[k]=i;

5

}

}

}

32.已知二叉树的存储结构为二叉链表,其类型定义如下:typedef struct NodeType {

DataType data;

struct NodeType *lchild,*rchild;

}BinTNode,*BinTree;

阅读算法F32,并回答下列问题:

(1) 对于如图所示的二叉树,画出执行算法f32 的结果;

( 2)简述算法f32 的功能。

BinTree f32(BinTree bt1)

{

BinTree bt2;

if(bt1==NULL)

bt2=NULL;

else {

bt2=(BinTNode *)malloc(sizeof(BinTNode));

bt2->data=bt1->data;

bt2->rchild=f32(bt1->lchild);

6

bt2->lchild=f32(bt1->rchild);

}

return bt2;

}

(1)

(2)

33.假设有向图采用邻接表表示法,其定义如下:

typedef struct {

VertexNode adjlist[MaxVertexNum];

int n,e;// 图的当前顶点数和弧数

} ALGraph;//邻接表类型

其中顶点表结点VertexNode 结构为:vertex firstedge

边表结点 EdgeNode 结构为:adjvexnext

下列算法f33 的功能是,对以邻接表表示的有向图进行拓扑排序。

(1)阅读算法 f33,并在空缺处填入

合适的内容,使其成为一个完

整的算法;

(2)对于如图所示的邻接表,将执行

算法 f33 后的 topo[ ] 结果填入给

定的数组中。

void f33(ALGraph G , int topo [ ]){

int i,j,k,count=0;

int indegree[MaxVertexNum];

EdgeNode *p;//p 为指向边表结点的指针

Queue Q;//Q 为队列

FindIndegree(G, indegree);//求各顶点的入度,并置于入度向量indegree

7

InitQueue(&Q);

for(i=0;i

if(!indegree[i])EnQueue(&Q,i);

while(!QueueEmpty(&Q)){

j=①;

topo[j]=++count;

for(p=G .adjlist[j].firstedge;p;p=->next){

k=p->adjvex;

if(!(--indegree[k]))②;

}

}

if(count

}

(1)①

(2)topo

01234567

五、算法设计题(本大题10 分)

34.假设以带头结点的单链表表示有序表,单链表的类型定义如下:

typedef struct node{

DataType data;

struct node *next

}LinkNode, *LinkList;

编写算法,从有序表 A 中删除所有和有序表 B 中元素相同的结点。

8

相关文档