耿国华数据结构附录A样卷习题答案及B卷习题答案.docx

上传人:b****2 文档编号:3099236 上传时间:2023-05-05 格式:DOCX 页数:19 大小:128.80KB
下载 相关 举报
耿国华数据结构附录A样卷习题答案及B卷习题答案.docx_第1页
第1页 / 共19页
耿国华数据结构附录A样卷习题答案及B卷习题答案.docx_第2页
第2页 / 共19页
耿国华数据结构附录A样卷习题答案及B卷习题答案.docx_第3页
第3页 / 共19页
耿国华数据结构附录A样卷习题答案及B卷习题答案.docx_第4页
第4页 / 共19页
耿国华数据结构附录A样卷习题答案及B卷习题答案.docx_第5页
第5页 / 共19页
耿国华数据结构附录A样卷习题答案及B卷习题答案.docx_第6页
第6页 / 共19页
耿国华数据结构附录A样卷习题答案及B卷习题答案.docx_第7页
第7页 / 共19页
耿国华数据结构附录A样卷习题答案及B卷习题答案.docx_第8页
第8页 / 共19页
耿国华数据结构附录A样卷习题答案及B卷习题答案.docx_第9页
第9页 / 共19页
耿国华数据结构附录A样卷习题答案及B卷习题答案.docx_第10页
第10页 / 共19页
耿国华数据结构附录A样卷习题答案及B卷习题答案.docx_第11页
第11页 / 共19页
耿国华数据结构附录A样卷习题答案及B卷习题答案.docx_第12页
第12页 / 共19页
耿国华数据结构附录A样卷习题答案及B卷习题答案.docx_第13页
第13页 / 共19页
耿国华数据结构附录A样卷习题答案及B卷习题答案.docx_第14页
第14页 / 共19页
耿国华数据结构附录A样卷习题答案及B卷习题答案.docx_第15页
第15页 / 共19页
耿国华数据结构附录A样卷习题答案及B卷习题答案.docx_第16页
第16页 / 共19页
耿国华数据结构附录A样卷习题答案及B卷习题答案.docx_第17页
第17页 / 共19页
耿国华数据结构附录A样卷习题答案及B卷习题答案.docx_第18页
第18页 / 共19页
耿国华数据结构附录A样卷习题答案及B卷习题答案.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

耿国华数据结构附录A样卷习题答案及B卷习题答案.docx

《耿国华数据结构附录A样卷习题答案及B卷习题答案.docx》由会员分享,可在线阅读,更多相关《耿国华数据结构附录A样卷习题答案及B卷习题答案.docx(19页珍藏版)》请在冰点文库上搜索。

耿国华数据结构附录A样卷习题答案及B卷习题答案.docx

耿国华数据结构附录A样卷习题答案及B卷习题答案

数据结构附录A样卷一

一、判断题:

(10分)正确在括号内打√,错误打×

(×)1.在单链表中,头结点是必不可少的。

(×)2.如果一个二叉树中没有度为1的结点,则必为满二叉树。

(√)3.循环链表的结点结构与单链表的结点结构完全相同,只是结点间的连接方式不同。

(×)4.顺序存储结构只能用来存放线性结构;链式存储结构只能用来存放非线性结构。

(√)5.在一个大根堆中,最小元素不一定在最后。

 

(√)6.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和。

(√)7.在采用线性探测法处理冲突的散列表中,所有同义词在表中相邻。

(√)8.内部排序是指排序过程在内存中进行的排序。

(×)9.拓扑排序是指结点的值是有序排列。

(×)10.AOE网所表示的工程至少所需的时间等于从源点到汇点的最长路径的长度。

 

二、选择题(30分,每题1.5分)

1.有一个含头结点的单链表,头指针为head, 则判断其是否为空的条件为:

___B___

A.head==NULL B.Head->next==NULL C.head->next==head D.Head!

=NULL

2.非空的循环单链表head的尾指针p满足___C____。

A.p->next=NULL   B.p==NULL    C.P->next==head    D. p==head

3.链表不具有的特点是 A 。

A、可随机访问任一个元素       B、插入删除不需要移动元素

 C、不必事先估计存储空间       D、所需空间与线性表的长度成正比

4.若某链表中最常用的操作是在最后一个结点之后插入一个结点和删除最后一个结点,则采用  D 存储方式最节省运算时间。

A、单链表   B、双链表   C、单循环链表   D、带头结点的双循环链表

5.若线性表最常用的操作是存取第i个元素及其前驱的值,则采用D存储方式节省时间。

 A、单链表   B、双链表   C、单循环链表   D、顺序表

6.设一个栈的输入序列为A,B,C,D,则借助一个栈所得到的输出序列不可能的是 D 。

 A、A,B,C,D         B、D,C,B,A

C、A,C,D,B        D、D,A,B,C

7.一个队列的入队序列是1,2,3,4,则队列的输出序列是 B  。

 A、4,3,2,1  B、1,2,3,4    C、1,4,3,2    D、3,2,4,1

8.设循环队列中数组的下标范围是1~n,其头尾指针分别为f,r,若队列中元素个数为   D    。

A、r-f      B、r-f+1     C、(r-f+1)modn  D、(r-f+n)modn

9.串是 D 。

 A、不少于一个字母的序列        B、任意个字母的序列

 C、不少于一个字符的序列        D、有限个字符的序列

10.数组A[1..5,1..6]的每个元素占5个单元,将其按行优先次序存储在起始地址为1000的连续内存单元中,则A[5,5]的地址是  A  。

 A、1140      B、1145      C、1120       D、1125

11.将一棵有100个结点的完全二叉树从根这一层开始,每一层从左到右依次对结点进行编号,根结点编号为1,则编号为49的结点的左孩子的编号为 A  。

 A、98       B、99       C、50        D、48

12.对二叉树从1开始编号,要求每个结点的编号大于其左右孩子的编号,同一个结点的左右孩子中,其左孩子的编号小于其右孩子的编号,则可采用  C  实现编号。

 A、先序遍历    B、中序遍历    C、后序遍历     D、从根开始进行层次遍历

13.某二叉树的先序序列和后序序列正好相反,则该二叉树一定是 B  的二叉树。

 A、空或只有一个结点             B、高度等于其结点数

 C、任一结点无左孩子             D、任一结点无右孩子

14.在有n个叶子结点的哈夫曼树中,其结点总数为  C   。

 A、不确定B、2n    C、2n+1       D、2n-1

15.一个有n个顶点的无向图最多有  C 条边。

 A、n     B、n(n-1)    C、n(n-1)/2   D、2n

16.任何一个无向连通图的最小生成树   B   。

 A、只有一棵  B、有一棵或多棵   C、一定有多棵   D、可能不存在

17.一组记录的关键字为(46,79,56,38,40,84),利用快速排序的方法,以第一个记录为基准得到的一次划分结果为   C    。

A、38,40,46,56,79,84B、40,38,46,79,56,84

C、40,38,46,56,79,84D、40,38,46,84,56,79

18.已知数据表A中每个元素距其最终位置不远,则采用  B 排序算法最节省时间。

 A、堆排序   B、插入排序   C、快速排序   D、直接选择排序

19.下列排序算法中,C 算法可能会出现下面情况:

初始数据有序时,花费时间反而最多。

 A、堆排序   B、冒泡排序   C、快速排序   D、SHELL排序

20.对于键值序列(12,13,11,18,60,15,7,18,25,100),用筛选法建堆,必须从键值为 B 的结点开始。

 A、100     B、60      C、12      D、15

三、填空题(40分)

1在顺序表(即顺序存储结构的线性表)中插入一个元素,需要平均动表长的一半个元素.

2.快速排序的最坏情况,其待排序的初始排列是排好序列.

4.一个栈的输入序列为123,写出不可能是栈的输出序列 312  。

5.N个结点的二叉树,采用二叉链表存放,空链域的个数为 N+1 .

6.要在一个单链表中p所指结点之后插入s所指结点时, 

  应执行S->next=P->next和P->next=S的操作.

7.Dijkstra算法是按路径递增的次序产生一点到其余各顶点最短路径的算法.

8.在N个结点完全二叉树中,其深度是 Log

(2)(N) .

9.对二叉排序树进行中序遍历,可得到结点的有序排列.

10.设一哈希表表长M为100,用除留余数法构造哈希函数,即H(K)=KMODP(P〈=M〉,

 

为使函数具有较好性能,P应选   97    

 

11.单链表与多重链表的区别是 链域个数不同 

12.深度为6(根层次为1)的二叉树至多有  63   个结点。

13.已知二维数组A[0..20][0..10]采用行序为主方式存储,每个元素占4个存储单元,并且A[0][0]的存储地址是1016,则A[10][5]的存储地址是    1476        

14.循环单链表La中,指针P所指结点为表尾结点的条件是  P->next=head   

15.在查找方法中,平均查找长度与结点个数无关的查找方法是 散列查找  。

16.队列的特性是  先进先出   

17.具有3个结点的二叉树有 5  种

18.已知一棵二叉树的前序序列为ABDFCE,中序序列为DFBACE,后序序列为  FDBECA  

19.已知一个图的邻接矩阵表示,要删除所有从第i个结点出发的边,在邻接矩阵运算是

 将矩阵第i行全部置0 

四、构造题:

(30分)

 1.已知关键字序列为:

(75,33,52,41,12,88,66,27)哈希表长为10,哈希函数为:

H(k)=KMOD7,解决冲突用线性探测再散列法,构造哈希表,求等概率下查找成功的平均查找长度。

答:

key

75

33

52

41

12

88

66

27

计算函数值

Key%7

5

5

3

6

5

4

3

6

比较次数

Cmp

1

2

1

2

4

1

7

5

计算函数值

(1)

哈希表(4分,每对1个0.5分)

index

0

1

2

3

4

5

6

7

8

9

key

27

52

88

75

33

41

12

66

ASL=(1+2+1+2+4+1+7+5)/8=23/8

 

2.已知无向图如图1所示,

(1)给出图的邻接表。

(2)从A开始,给出一棵广度优先生成树。

 

1

A

B

C

D

2

B

A

C

F

3

C

A

B

D

E

F

4

D

A

C

F

5

E

B

C

F

6

F

D

C

E

 

3.给定叶结点权值:

(1,3,5,6,7,8),构造哈夫曼树,并计算其带权路径长度

30

1713

9867

45

13

WPL=1*4+3*4+5*3+6*2+7*2+8*2=73

4.从空树开始,逐个读入并插入下列关键字,构造一棵二叉排序树:

     (24,88,42,97,22,15,7,13)。

 24

2288

154297

7

13

5.对长度为8的有序表,给出折半查找的判定树,给出等概率情况下的平均查找长度。

 ASL=(1+2*2+4*3+1*4)/8=21/8=2.62

6.已知一棵树如图2所示,要求将该树转化为二叉树。

 

 

 

 

 

 

 

 

A

B

C

ED

F

IG

JH 

K

 

五、算法设计题(40分)

[算法题可用类PASCAL或类C语言,每题20分]

1.已知一棵二叉树采用二叉链表存放,写一算法,要求统计出二叉树中叶子结点个数并输出二叉树中非终端结点(输出无顺序要求)。

structBtree

{

intdata;

structBtree*left;

structBtree*right;

};

intcount(Btree*T)

{

Btree*st[50];

inttop=-1;

Btree*p;

intsum=0;

if(T!

=NULL)

{

top++;

st[top]=T;

while(top>-1)

{

p=st[top];

top--;

if(p->right!

=NULL)

{

top++;

st[top]=p->right;

}

if(p->left!

=NULL)

{

top++;

st[top]=p->left;

}

if(p->left==NULL&&p->right==NULL)

{

sum++;

}

}

returnsum;

}

}

2.编写算法,判断带头结点的双循环链表L是否对称。

对称是指:

设各元素值a1,a2,...,an,则有ai=an-i+1  

即指:

a1=an,a2=an-1 。

   结点结构为

prior

data

next

 

数据结构附录B样卷二

一、简答题(15分,每小题3分)

1.简要说明算法与程序的区别。

算法是解决特定问题的操作序列,可以用多种方式描述。

程序是算法在计算机中的实现,与具体的计算机语言有关。

2.在哈希表中,发生冲突的可能性与哪些因素有关?

为什么?

主要与哈希函数、装填因子α有关。

如果用哈希函数计算的地址分布均匀,则冲突的可能性较小,如果装填因子α较小,则哈希表较稀疏,发生冲突的可能性较小。

3.说明在图的遍历中,设置访问标志数组的作用。

图中结点可能有多个前驱,设置访问标志数组主要是为了避免重复访问同一个结点。

4.说明以下三个概念的关系:

头指针,头结点,首元素结点。

头指针指向头结点,头结点的后继域指向首元素结点。

5.在一般的顺序队列中,什么是假溢出?

怎样解决假溢出问题?

当队尾到达数组最后一个单元时,就认为队满,但此时数组前面可能还有空单元,因此叫假溢出。

解决的方法是采用循环队列,即令最后一个单元的后继是第一个单元。

二、判断题(10分,每小题1分)

正确在括号内打√,错误打×

(√)

(1)广义表(((a),b),c)的表头是((a),b),表尾是(c)。

(×)

(2)在哈夫曼树中,权值最小的结点离根结点最近。

(×)(3)基数排序是高位优先排序法。

(√)(4)在平衡二叉树中,任意结点左右子树的高度差(绝对值)不超过1。

(×)(5)在单链表中,给定任一结点的地址p,则可用下述语句将新结点s插入结点p的后面:

p->next=s;s->next=p->next;

(√)(6)抽象数据类型(ADT)包括定义和实现两方面,其中定义是独立于实现的,定义仅给出一个ADT的逻辑特性,不必考虑如何在计算机中实现。

(×)(7)数组元素的下标值越大,存取时间越长。

(√)(8)用邻接矩阵法存储一个图时,在不考虑压缩存储的情况下,所占用的存储空间大小只与图中结点个数有关,而与图的边数无关。

(×)(9)拓扑排序是按AOE网中每个结点事件的最早发生时间对结点进行排序。

(×)(10)长度为1的串等价于一个字符型常量。

三、单项选择题(10分,每小题1分)

1.排序时扫描待排序记录序列,顺次比较相邻的两个元素的大小,逆序时就交换位置。

这是哪种排序方法的基本思想?

D

A、堆排序B、直接插入排序C、快速排序D、冒泡排序

2.已知一个有向图的邻接矩阵表示,要删除所有从第i个结点发出的边,应该:

B

A)将邻接矩阵的第i行删除B)将邻接矩阵的第i行元素全部置为0

C)将邻接矩阵的第i列删除D)将邻接矩阵的第i列元素全部置为0

3.有一个含头结点的双向循环链表,头指针为head,则其为空的条件是:

C

A.head->priro==NULLB.head->next==NULL

C.head->next==headD.head->next->priro==NULL

4.在顺序表(3,6,8,10,12,15,16,18,21,25,30)中,用折半法查找关键码值11,所需的关键码比较次数为:

C

A)2B)3C)4D)5

5.以下哪一个不是队列的基本运算?

B

A)从队尾插入一个新元素B)从队列中删除第i个元素

C)判断一个队列是否为空D)读取队头元素的值

6.在长度为n的顺序表的第i个位置上插入一个元素(1≤i≤n+1),元素的移动次数为:

A)n–i+1B)n–iC)iD)i–1

7.对于只在表的首、尾两端进行插入操作的线性表,宜采用的存储结构为:

C

A)顺序表B)用头指针表示的循环单链表

C)用尾指针表示的循环单链表D)单链表

8.对包含n个元素的哈希表进行查找,平均查找长度为:

D

A)O(log2n)B)O(n)C)O(nlog2n)D)不直接依赖于n

9.将一棵有100个结点的完全二叉树从根这一层开始,每一层从左到右依次对结点

进行编号,根结点编号为1,则编号最大的非叶结点的编号为:

C

A、48B、49C、50D、51

10.某二叉树结点的中序序列为A、B、C、D、E、F、G,后序序列为B、D、C、A、F、G、E,则其左子树中结点数目为:

C

A)3 B)2C)4D)5

四、填空题(10分,每空1分)

1.填空完成下面一趟快速排序算法:

intQKPass(RecordTyper[],intlow,inthigh)

{x=r[low];

while(low

{

while(low=x.key)

high--;

if(low

{r[low]=r[high];low++;}

while(low

low++;

if(low

{r[high]=r[low];high--;}

}

r[low]=x;returnlow;

}

2.假设用循环单链表实现队列,若队列非空,且队尾指针为R,则将新结点S加入队列时,需执行下面语句:

S->next=R->next;R->next=S;R=S;

3.通常是以算法执行所耗费的时间和所占用的空间来判断一个算法的优劣。

4.已知一个3行、4列的二维数组A(各维下标均从1开始),如果按“以列为主”的顺序存储,则排在第8个位置的元素是:

A[2,3]

5.高度为h的完全二叉树最少有2h-1个结点。

五、构造题(20分)

1.(4分)已知数据结构DS的定义如下,请给出其逻辑结构图示。

DS=(D,R)

D={a,b,c,d,e,f,g}

R={T}

T={,,,,,,

,,,,,}

2.(6分)对以下关键字序列建立哈希表:

(SUN,MON,TUE,WED,THU,FRI,SAT),哈希函数为H(K)=(K中最后一个字母在字母表中的序号)MOD7。

用线性探测法处理冲突,要求构造一个装填因子为0.7的哈希表,并计算出在等概率情况下查找成功的平均查找长度。

解:

装填因子=元素个数/表长,得哈希表长度=7/0.7=10

各关键字第一个字母的序号分别为:

19(S),13(M),20(T),23(W),6(F)

key

SUN

MON

TUE

WED

THU

FRI

SAT

计算函数值

Key%7

5

6

6

2

6

6

5

比较次数

Cmp

1

1

2

1

3

4

6

 

index

0

1

2

3

4

5

6

7

8

9

key

SAT

WED

SUN

MON

TUE

THU

FRI

 

ASL=(6+1+1+1+2+3+4)18/7

3.(6分)将关键字序列(3,26,12,61,38,40,97,75,53,87)调整为大根堆。

4.(4分)已知权值集合为:

{5,7,2,3,6,9},要求给出哈夫曼树,并计算其带权路径长度WPL。

WPL=2×(9+6+7)+3×5+4×(2+3)=79

六、算法分析题(10分)

阅读下面程序,并回答有关问题。

其中BSTree为用二叉链表表示的二叉排序树类型。

(1)简要说明程序功能。

(5分)

(2)n个结点的满二叉树的深度h是多少?

(3分)

(3)假设二叉排序树*bst是有n个结点的满二叉树,给出算法的时间复杂度。

(2分)

intProc(BSTree*bst,KeyTypeK)

{BSTreef,q,s;

s=(BSTree)malloc(sizeof(BSTNode));

s->key=K;s->lchild=NULL;s->rchild=NULL;

if(*bst==NULL){*bst=s;return1;}

f=NULL;q=*bst;

while(q!

=NULL)

{if(Kkey)

{f=q;q=q->lchild;}

else

{f=q;q=q->rchild;}

}

if(Kkey)f->lchild=s;

elsef->rchild=s;

return1;

}

解:

(1)在二叉排序树中插入关键字为K的结点

(2)h=log2(n+1)或h=[log2n]+1(方括号表示向下取整)

(3)O(log2(n+1))或O(log2n)

七、算法设计题(25分)

1.已知一个带头结点的整数单链表L,要求将其拆分为一个正整数单链表L1和一个负整数单链表L2。

(9分)

LinkList*q;

q=L->head;

while(q)

{

if(q->data>0)

{

q->next=L1->head->next;

L1->head=q;

}

else

{

q->next=L2>head->next;

L2->head=q;

}

q++;

}

2.无向图采用邻接表存储结构,编写算法输出图中各连通分量的结点序列。

(8分)

 

 

3.编写一个建立二叉树的算法,要求采用二叉链表存储结构。

(8分)

VoidGreateBiTree(BiTree*bt)

{charch;

ch=getchar();

if(ch==’.’)*bt=NULL;

else

{

*bt=(BiTree)malloc(sizeof(BiTNode));

(*bt)data=ch;

GreatBiTree(&((*bt)LChild));

GreatBiTree(&((*bt)RChild));

}

}

 

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

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

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2