下半年全国自考数据结构真题及答案.docx

上传人:b****5 文档编号:6407908 上传时间:2023-01-06 格式:DOCX 页数:16 大小:144.91KB
下载 相关 举报
下半年全国自考数据结构真题及答案.docx_第1页
第1页 / 共16页
下半年全国自考数据结构真题及答案.docx_第2页
第2页 / 共16页
下半年全国自考数据结构真题及答案.docx_第3页
第3页 / 共16页
下半年全国自考数据结构真题及答案.docx_第4页
第4页 / 共16页
下半年全国自考数据结构真题及答案.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

下半年全国自考数据结构真题及答案.docx

《下半年全国自考数据结构真题及答案.docx》由会员分享,可在线阅读,更多相关《下半年全国自考数据结构真题及答案.docx(16页珍藏版)》请在冰豆网上搜索。

下半年全国自考数据结构真题及答案.docx

下半年全国自考数据结构真题及答案

更多优质自考资料尽在XX贴吧自考乐园俱乐部

2006年下半年全国自考数据结构真题

 

一、单项选择题(本大题共15小题,每小题2分,共30分)在每小题列出的四个备选项

中只有一个是符合题目要求的,请将其代码填写在题后的括号内。

错选、多选或未选均

无分。

1.数据结构是()

A.一种数据类型

B.数据的存储结构

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

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

答案:

D

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

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

B.评价算法的效率

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

D.鉴别算法的可读性

答案:

B

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

A.插入

B.删除

C.排序

D.定位

答案:

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

答案:

B

5.设串sl=″DataStructureswithJava″,s2=″it″,则子串定位函数index(s1,s2)的值

为()

A.15

B.16

C.17

D.18

 

答案:

C

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

1087,A[4][7]的存储地址为1153,则数组元素A[6][7]的存储地址为()

A.1207

B.1209

C.1211

D.1213

答案:

A

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

A.队列表

B.栈

C.线性表

D.有序

答案:

A

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

A.不一定相同

B.都相同

C.都不相同

D.互为逆序

答案:

B

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

A.层次遍历算法

B.前序遍历算法

C.中序遍历算法

D.后序遍历算法

答案:

C

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

A.图中每个顶点的入度

B.图中每个顶点的出度

C.图中弧的条数

D.图中连通分量的数目

答案:

A

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

A.无向图

B.有向图

C.稠密图

 

D.稀疏图

答案:

C

12.在对n个关键字进行直接选择排序的过程中,每一趟都要从无序区选出最小关键字元素

,则在进行第i趟排序之前,无序区中关键字元素的个数为()

A.i

B.i+1

C.n-i

D.n-i+1

答案:

D

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

A.插入排序

B.堆排序

C.快速排序

D.冒泡排序

答案:

B

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

答案:

A

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

为()

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

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

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

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

答案:

C

 

二、填空题(本大题共10小题,每小题2分,共20分)请在每小题的空格中填上正确答

案。

错填、不填均无分。

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

答案:

f(n)

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

答案:

O(n)

 

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

当前尾指针的值为___。

答案:

10

4.设s=″IAMAATHLETE″,t=″GOOD″,则执行下列串操作序列之后得到的sub1为___。

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

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

答案:

"AGOODATHLETE"

5.广义表的深度是指___。

答案:

广义表展开后所含括号的最大层数

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

答案:

10

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

答案:

n-1

8.对表长为9000的索引顺序表进行分块查找,假设每一块的长度均为15,且以顺序查找确定

块,则在各记录的查找概率均相等的情况下,其查找成功的平均查找长度为___。

答案:

308.5

9.若对关键字序列(43,02,80,48,26,57,15,73,21,24,66)进行一趟增量为3的希

尔排序,则得到的结果为___。

答案:

15,02,21,24,26,57,43,66,80,48,73

10.ISAM文件由主索引、___、___和主文件组成。

答案:

柱面索引(1分)磁道索引(1分)

 

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

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

答案:

(说明:

每错2个结点扣1分)

 

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

(1)画出该二叉树;

(2)画出与

(1)求得的二叉树对应的森林。

答案:

 

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

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

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

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

 

答案:

 

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

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

(2)画出从

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

答案:

 

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

1.已知用有序链表存储整数集合的元素。

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

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

{2,4,5,7,9}的链表的头指针;

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

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

intf30(LinkListha,LinkListhb)

{

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

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

LinkListpa,pb;

pa=ha->next;

pb=hb->next;

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

{pa=pa->next;

pb=pb->next;

}

if(pa==NULL&&pb==NULL)return1;

elsereturn0;

}

答案:

(1)0(2分)

(2)判断两个整数集合是否相等,相等则返回1,否则返回0(2分)

(3)O(Min(m,n)),m和n分别为两个整数集合中的元素个数(1分)

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

#defineMaxRow100//稀疏矩阵的最大行数

typedefstruct{

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

}TriTupleNode;

typedefstruct{

TriTupleNodedata[MaxSize];

intRowTab[MaxRow+1];//行表

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

}RTriTupleTable;

 

下列算法f31的功能是,以行优先的顺序输入稀疏矩阵的非零元(行号、列号、元素值),建立

稀疏矩阵的带行表的三元组表存储结构。

请在___处填入合适内容,使其成为一个完整的算法。

(注:

矩阵的行、列下标均从1起计)

voidf31(RTriTupleTable*R)

{inti,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;

}

}

}

答案:

it(2分)

&R->data[i].i(1分)

&R->data[i].j(1分)

k++(1分)

3.已知二叉树的存储结构为二叉链表,其类型定义如下:

typedefstructNodeType{

DataTypedata;

structNodeType*lchild,*rchild;

}BinTNode,*BinTree;

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

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

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

BinTreef32(BinTreebt1)

{

BinTreebt2;

if(bt1==NULL)

bt2=NULL;

else{

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

bt2->data=bt1->data;

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

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

}

returnbt2;

}

 

答案:

(1)(3分)

 

(说明:

每错2个结点扣1分,扣完为止)

 

(2)函数f32返回一个指向复制所得二叉树根结点的指针,新建的二叉树上每个结点的左、右孩

子均为原二叉树上相应结点的右、左孩子(2分)

(说明:

指出复制给1分,指出左、右孩子对应关系给1分)

 

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

typedefstruct{

VertexNodeadjlist[MaxVertexNum];

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

}ALGraph;//邻接表类型

  其中顶点表结点VertexNode结构为下图(a):

边表结点EdgeNode结构为:

下图(b)

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

(1)阅读算法f33,并在空缺处填入合适的内容,使其成为一个完整的算法;

(2)对于如下图(c)所示的邻接表,将执行算法f33后的topo[]结果填入给定的数组中。

voidf33(ALGraphG,inttopo[]){

inti,j,k,count=0;

intindegree[MaxVertexNum];

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

QueueQ;//Q为队列

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

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=p->next){

k=p->adjvex;

if(!

(--indegree[k]))②;

}

}

if(count

 

}

(1)①

 ②

(2)如下图(d)

 

答案:

(1)①DeQueue(&Q)(1分)

②EnQueue(&Q,k)(1分)

(2)如下图:

(说明:

topo[0]、topo[1]和topo[2]的值都对给1分,topo[7]的值对给1分,其余给

1分)。

 

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

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

typedefstructnode{

DataTypedata;

structnode*next

}LinkNode,*LinkList;

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

答案:

参考答案一:

voidf34(LinkListha,LinkListhb)程序头1分

{//hb和hb分别为存放A和B有序链表的头指针

LinkListp,q,r;初始化1分

p=ha;

q=hb->next;

while(p->next&&q){循环语句条件1分

if(p->next->datadata)if语句2分

p=p->next;

else{else语句4分

if(p->next->data==q->data){

r=p->next;

p->next=r->next;

free(r);

}//从A表删除相同的元素结点

q=q->next;指针后移1分

}

}

}

参考答案二:

voidf34(LinkListha,LinkListhb)程序头1分

{//hb和hb分别为存放A和B有序链表的头指针

LinkListp,q,r;初始化1分

r=ha;p=ha->next;

q=hb->next;

while(p&&q){循环语句条件1分

if(p->datadata){if语句2分

更多优质自考资料尽在XX贴吧自考乐园俱乐部

r=p;p=p->next;

}else{else语句4分

if(p->data==q->data){

r->next=p->next;

free(p);

p=r->next;

}//从A表删除相同的元素结点

q=q->next;指针后移1分

}

}

}

(说明:

所写的算法语句形式与此参考答案有出入,但功能正确,可依此评分标准酌情给分)。

 

自考乐园,自考学习交流、资料共享的好去处!

自考乐园,自考人自己的家园....

俱乐部id:

5346389(请牢记它哦~在XX贴吧的搜索框中输入俱乐部id,可以直接进入俱乐部

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1