2017年4月自考02331数据结构试题及答案含解析_第1页
2017年4月自考02331数据结构试题及答案含解析_第2页
2017年4月自考02331数据结构试题及答案含解析_第3页
2017年4月自考02331数据结构试题及答案含解析_第4页
2017年4月自考02331数据结构试题及答案含解析_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构年月真题

0233120174

1、【单选题】下列叙述中,不正确的是

算法解决的只能是数值计算问题

同一问题可以有多种不同算法

A:

算法的每一步操作都必须明确无歧义

B:

算法必须在执行有限步后结束

C:

答D:案:A

解析:本题可以用排除法,算法的5个准则:有穷性,即算法中每一条指令的执行次数都

是有限的。确定性:算法中每一条指令的含义都必须明确,无二义性。同一个问题可以用

多种算法。B、C、D都是正确的,答案是A。

2、【单选题】下列关于栈中逻辑上相邻的两个数据元素的叙述中,正确的是

顺序存储时不一定相邻,链式存储时一定相邻

顺序存储时不一定相邻,链式存储时也不一定相邻

A:

顺序存储时一定相邻,链式存储时也一定相邻

B:

顺序存储时一定相邻,链式存储时不一定相邻

C:

答D:案:D

解析:线性表顺序存储的特点是逻辑关系上相邻的两个元素在物理位置上也是相邻的,链

式存储结构存储线性表数据元素的空间可能连续,也可能不连续。

3、【单选题】对带头结点的单循环链表从头结点开始遍历(head为头指针,p=head-

>next)。若指针p指向当前被遍历结点,则判定遍历过程结束的条件是

P==NULL

head==NULL

A:

P==head

B:

head!=P

C:

答D:案:C

解析:因为是单循环链表,P的指针指向头结点时遍历一遍,所以P=head。

4、【单选题】设栈的入栈序列为1,2,3,4,5,经过入、出栈操作后,可能得到的出栈序

列是

2,3,5,1,4

4,2,1,3,5

A:

3,4,1,2,5

B:

3,4,2,1,5

C:

答D:案:D

解析:栈的特点:后进先出。答案D正确。进出顺序为:1进2进3进3出4进4出2出

1出5进5出。其他选项均违背了后进先出的原则。

5、【单选题】数组A[2][3]按行优先顺序存放,A的首地址为10。若A中每个元素占用一个

存储单元,则元素A[1][2]存储地址是

10

12

A:

14

B:

15

C:

答D:案:D

解析:数组元素aij的地址计算函数为:LOC(aij)=LOC(a00)+(i*n+j)*d,因为

i=1,j=2,n=3,根据公式得:LOC(a12)=10+(1*3+2)=15,答案为D。

6、【单选题】广义表((a,b),(c,d))的表尾是

b

d

A:

(c,d)

B:

((c,d))

C:

答D:案:D

解析:当表为非空时,称第一个元素是表头,其余元素组成的表称为表尾,该题的表头是

(a,b),表尾是((c,d)),答案为D。

7、【单选题】若完全二叉树T包含20个终端结点,则T的结点数最多是

38

39

A:

40

B:

41

C:

答D:案:C

解析:由完全二叉树定义可知,在完全二叉树中除最下面一层外,各层结点都达到最大

值,每一层上结点个数恰好是上一层结点个数的2倍。所以答案为C。

8、【单选题】对下面的二叉树进行中序线索化后,结点f的右指针指向的结点是

a

b

A:

c

B:

e

C:

答D:案:D

解析:中序遍历的操作顺序:左子树,根结点,右子树。答案为D。

9、【单选题】若图G是一个含有n个顶点的强连通有向图,则G的边数至少是

n-1

n

A:

n*(n+1)/2

B:

n*(n+l)

C:

答D:案:B

解析:强连通图是指一个有向图中任意两点v1、v2间存在v1到v2的路径及v2到v1的

路径的图。最少的情况:即n个顶点围成一个圈,且圈上各边方向一致,即均为顺时针或

者逆时针,此时有n条边。

10、【单选题】若从顶点a开始对下图进行广度优先遍历,则不可能得到的遍历序列是

a,b,c,e,f,d

a,c,b,e,f,d

A:

a,c,e,b,d,f

B:

a,e,b,c,f,d

C:

答D:案:C

解析:广度优先搜索的基本思想:先访问出发点Vi,接着依次访问Vi的所有未被访问

接点Vi1,Vi2……,并标记为已经访问,然后再按照Vi1,Vi2……的次序访问每一个

顶点的所有未曾访问的顶点半标记为访问。答案的4个选项都以顶点a为出发点,b,c,e

的顺序可以任意,但d,f的顺序受e,c被访问的先后顺序影响,答案C中,以a为出发

点,接点是c,e,b,因为先访问的C,那么下一步要先访问f,才能再访问d,这个顺序不正

确,所以答案为C。

11、【单选题】下列排序算法中,稳定的是

堆排序

直接选择排序

A:

冒泡排序

B:

希尔排序

C:

答D:案:C

解析:这个题考查各种排序方法的稳定性,教材190页内部排序方法的分析与比较中总结

到,直接插入、冒泡、归并、基数排序算法是稳定的,直接选择、希尔、快速、堆排序算

法是不稳定的,所以答案为C。

12、【单选题】下列排序算法中,比较操作的次数与待排序序列初始排列状态无关的是

快速排序

直接选择排序

A:

冒泡排序

B:

直接插入排序

C:

答D:案:B

解析:教材191页排序方法的选取一节中讲到,关键字比较次数与记录的初始排列顺序无

关的排序方法是选择排序。故答案选B。

13、【单选题】若对二叉排序树进行遍历,则下列遍历方式中,其遍历结果为递增有序的是

前序遍历

中序遍历

A:

后序遍历

B:

按层遍历

C:

答D:案:B

解析:根据二叉排序树的定义它的右子树非空,则右子树上的所有结点的值均大于根结点

的值,若它的左子树为非空,则左子树上所有结点的值均小于根结点的值,左、右子树本

身又是一棵二叉排序树。因为中序遍历是先左子树,再根结点,再右子树,所以按中序遍

历二叉排序树所得到的遍历序列是一个递增有序序列。

14、【单选题】设一组记录的关键字为{12,22,10,20,88,27,54,11},散列函数为

H(key)=key%11,用拉链法解决冲突,则散列地址为0的链中结点数是

1

2

A:

3

B:

4

C:

答D:案:C

解析:散列地址为0的结点即是关键字可以整除11,记录中,22,88,11都可以整除

11,所以结点数为3,答案为C。

15、【单选题】在下面3阶B树中插入关键字65后,其根结点内的关键字是

5390

53

A:

90

B:

65

C:

答D:案:D

解析:在B树中插入一个结点的过程:先在最低层的某个非终端结点中添加一个关键字。

若该结点中关键字的个数不超过m-1,则插入完成,否则要产生结点“分裂”。“分裂”

结点时把结点分成两个,将中间的一个关键字拿出来插入到该结点的双亲结点上,如果双

亲结点中已有m-1个关键字,则插入后将引起双亲结点的分裂,这一过程可能波及B树的

根结点,引起根结点的分裂,从而使B树长高一层。具体过程:因为65介于61和70之

间,所以插到该节点中,但插入后节点数超过了2,所以要分裂,把65拿到双新结点中,

同时61和70分成两个结点,但这时53和90这个结点中因为插入了65,关键字超过了

3,也要分裂,65升为双亲结点,53和90分成两个结点。所以该题答案为D。

16、【问答题】对题26图所示的带权无向图G,试回答以下问题。

(1)画出G的最小生成树:(2)

若用克鲁斯卡尔(Kruskal)算法求最小生成树,请按被选中的次序写出最小生成树上各条

边的顶点和权值。

答案:

解析:本题是教材上P156例6.3原题。克鲁斯卡尔(Kruskal)算法按权值递增顺序考虑边

(A,C),(D,F,(B,E),(C,F),(A,D),(B,C),(C,D),(A,B),(C,E),

(E,F),因为前4条边的权值最小,而且不在不形成回路,所以加入T中,接着考虑当

前的权值最小的边(A,D),因为该边的两个端点在同一个回路上,故舍去,然后再选择

(B,C)加入T,便得到要求一最小生成树了。

17、【问答题】已知散列表的长度为11,散列函数为H(key)=key%11,散列表的当前状

态如下:现要插入关键字

38,回答下列问题。(1)若用线性探查法解决冲突,则38所在位置的下标是什么?

(2)若用二次探查法解决冲突,则38所在位置的下标是什么?(3)以上两种方法中,

各需要多少次探查次数?

答案:(1)插入位置的下标是8;(2)插入位置的下标是4;(3)探查次数分别为4和

3.

解析:(1)h(38)=5,散列地址5已经被占,因些探查h1=(5+1)%11=6,但散列地址6也已

经被占,再探查h2=(6+1)%11=7,散列地址7也被占了,再探查h3=(7+1)%11=8,此地址是

开放的,可将38插入。(2)h(38)=5,散列地址5已经被占,因些探查h1=(5+12)%11=6,

但散列地址6也已经被占,再探查h2=(5-12)%11=4,此地址是开放的,可将38插入。

(3)根据第1和2题的探查次数可得知为4次和3次。

18、【问答题】试回答下列关于拓扑排序算法的问题。(1)算法中利用一个栈保存入度为

0的顶点,其目的是什么?(2)若在算法中将队列改为栈,相应地将入、出栈及判栈空操作

改为入、出队列和判队列空操作,其他部分不变,是否依然能够得到拓扑排序时正确结果?

答案:(1)每次选择入度为0的顶点时,只需要做出栈操作就可以了,减少找入度为0

的顶点的时间,提高排序的效率。(2)每次选人度为零的顶点时,只需做出栈(队)操作

即可。所以把栈换成队列同样可以实现。

解析:教材164页,拓扑排序实际就是对临接表的遍历,每次访问一个入度为0的顶点。

设一个栈暂存所有入度为0的顶点,每次选择入度为0的顶点时,只需要做出栈操作就可

以了,减少找入度为0的顶点的时间,提高排序的效率。栈或队列的作用就是暂存所有入

度为零的顶点:在开始排序前,扫描对应的存储空间,将入度为零的顶点均入栈(队)。以

后每次选入度为零的顶点时,只需做出栈(队)操作即可。所以把栈换成队列同样可以实

现。

19、【问答题】考虑用快速排序、堆排序和归并排序3种排序方法对数据序列进行排序,针

对下列不同情况,宜分别选择哪种排序方法?(1)使用尽量少的存储空间;(2)要求排序

结果是稳定的;(3)快速找出数据序列中关键字值较大的若干项。

答案:(1)堆排序(2)归并排序(3)堆排序

解析:根据教材190页内部排序方法的比较分析得出这三种排序方法中,堆排序是要求空

间最小的O(1),归并排序是最稳定的。堆排序是一种选择排序。建立的初始堆为初始的

无序区。排序开始,首先输出堆顶元素(因为它是最值),将堆顶元素和最后一个元素交

换,这样,第n个位置(即最后一个位置)作为有序区,前n-1个位置仍是无序区,对无

序区进行调整,得到堆之后,再交换堆顶和最后一个元素。如果建的最大化堆,就能快速

找出关键字较大的若干项。

20、【问答题】设链表中结点类型定义如下,阅读程序,回答下列问题。

(1)若链表L={2,12,16,

88,5,10},写出调用f30(L)的输出结果;(2)函数f30的功能是什么?

答案:(1)88;(2)返回链表中各结点中值最大的。

解析:max(head->data,f30(head->next),链表中的两个结点值比较,输出值大的那个。

21、【问答题】函数f31的功能是逆序输出链表中所有结点的数据域值。请在空白处填充

适当的内容,使其完成指定功能。

答案:(1)return;(2)head->data

解析:如果节点为空,则不打印,直接返回,否则逆向打印后面节点的元素,最后打印当

前节点元素,这个递归就表明,总是先打印当前节点之后节点的值。

22、【问答题】函数f32的功能是统计N个顶点的有向图中边的数量,有向图用邻接矩阵

A表示。阅读程序,并在空白处填入适当内容,使其完成指定功能。

答案:(1)i++;(2)j=0;(3)A[i][j]>0

解析:循环语句,从i=0开始,一直循环到i=n-1,从j=0开始,循环到J=n-1.如果

A[i][j]>0,sum就加1,最后返回总值。

23、【问答题】己知二叉树的二叉链表类型定义如下:

答案:(1)bt==null;(2)hl>hr;(3)return(hr+1)

解析:教材120页例5.3原题,一颗二叉树为空,则深度为0,否则它的深度等于其左右

子树中的最大深度加1.

24、【问答题】已知二叉树的结点类型定义如下:

请编写函数SearchXNum,计

算任意二叉树T中其数据域的值大于或等于x的结点的个数并返回该值。函数原型如下:

SearchXNum(BinTree*T,intx);∥返回二叉树T中数据域的值大于或等于x的结点的

个数。

答案:intLTXNum(BinTree*t,intx){intn;if(T==null)return0;if(T-

>data>=x)n=1;elsen=0;returnn+LTXNum(T->lchild,x)+LTXNum(T->rchild,x)}

解析:算法的思想是根结点如果为空,表示该二叉为空树,返回0。如果根结点值大于或

等X,n=1,并返回结点的值。然后用递归算法,分别把左子树和右子树大于X的结点个数

算出来并返回值,最后返回结点的个数。

25、【填空题】散列方法的基本思想是根据元素的关键字直接计算出该元素的_______。

答案:存储地址

解析:散列存储的基本思想:以线性表中的每个元素的关键字为自变量,通过一种函数H

(key)计算出函数值,把这个函数值解释为一块连续存储空间的单元地址。

26、【填空题】一个需要频繁增删的线性表宜选择______存储结构。

答案:链式

解析:线性表当需要做插入和删除操作时,需要移动大量的元素,而链式存储结避免这些

移动。

27、【填空题】若中缀表达式为9+(6-2)*8,则相应的后缀表达式是_______。

答案:962-8*+

解析:中缀表达式转化成后缀表达式的思想:顺序扫描中缀表达式,当读到数字时,直接

送至输出队列,当读到运算符时,将栈中所有优先级高于或等于该运算符的运算符弹出,

再将当前运算符入栈,当读入左括号时入栈,当读到右括号时,将靠近栈顶的第一个左括

号上面的运算符依次弹出,再删除栈中左括号。本题中9弹出,“+”“(”入栈,6弹

出,“-”入栈,2弹出,遇到右括号了,把“-”弹出,删除左括号,“*”入栈,8弹

出,“*”弹出,最后“+”弹出。

28、【填空题】对任何一棵二叉树T,若其叶子结点数为n0,度数为2的结点数为n2,则

n2等于____。

答案:n2=n0-1

解析:根据二叉树性质3,对任何一棵二叉树,若其终端结点数为n0,度数为2的结点数

为n2,则n0=n2+1。

29、【填空题】若某二叉树

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论