数据结构复习答案.docx
《数据结构复习答案.docx》由会员分享,可在线阅读,更多相关《数据结构复习答案.docx(25页珍藏版)》请在冰点文库上搜索。
数据结构复习答案
数据结构复习答案
一、选择填空
1.下面关于线性表的叙述中,错误的是哪一个?
( )
A)线性表采用顺序存储,必须占用一片连续的存储单元。
√B)线性表采用顺序存储,便于进行插入和删除操作。
C)线性表采用链接存储,不必占用一片连续的存储单元。
D)线性表采用链接存储,便于插入和删除操作。
2.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用( )存储方式最节省时间。
√A)顺序表 B)双链表 C)带头结点的双循环链表 D)单循环链表
3.链表不具有的特点是( )。
A)插入、删除不需要移动元素 √B)可随机访问任一元素
C)不必事先估计存储空间 D)所需空间与线性长度成正比
4.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为( )(1<=i<=n+1)。
A)O(0) B)O
(1) √C)O(n) D)O(n2)
5.线性表(a1,a2,…,an)以链接方式存储时,访问第i位置元素的时间复杂度为( )。
A)O(i) B)O
(1) √C)O(n) D)O(i-1)
6.在单链表指针为p的结点之后插入指针为s的结点,正确的操作是:
( )。
A)p->next=s;s->next=p->next; √B)s->next=p->next;p->next=s;
C)p->next=s;p->next=s->next; D)p->next=s->next;p->next=s;
7.设指针变量p指向单链表结点A,则删除结点A的后继结点B需要的操作为( )。
√A)p->next=p->next->nextB)p=p->next
C)p=p->next->nextD)p->next=p
8.在双向链表指针p的结点前插入一个指针q的结点操作是( )。
A) p->prior=q;q->next=p;p->prior->next=q;q->prior=q;
B) p->prior=q;p->prior->next=q;q->next=p;q->prior=p->prior;
√C) q->next=p;q->prior=p->prior;p->prior->next=q;p->prior=q;
D) q->prior=p->prior;q->next=q;p->prior=q;p->prior=q;
9.在双向链表存储结构中,删除p所指的结点时须修改指针( )。
√A)(p->prior)->next=p->next (p->next)->prior=p->prior;
B)p->prior=(p->prior)->prior (p->prior)->next=p;
C)(p->next)->prior=p p->next=(p->next)->next
D)p->next=(p->prior)->prior p->prior=(p->next)->next;
10.( )又称为FIFO表;( )又称为FILO表。
√A)队列B)散列表√C)栈D)哈希表
11.对于栈操作数据的原则是( )。
A)先进先出 √B)后进先出 C)后进后出 D)不分顺序
12.用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删除操作时( )。
√A)仅修改队头指针 B)仅修改队尾指针
C)队头、队尾指针都要修改 D)队头、队尾指针都可能要修改
13.假设以数组A[m]存放循环队列的元素,其头尾指针分别为front和rear,则当前队列中的元素个数为( )。
√A)(rear-front+m)%m B)rear-front+1 C)(front-rear+m)%m D)(rear-front)%m
14.栈和队列的共同点是( )。
A)都是先进先出 B)都是先进后出
√C)只允许在端点处插入和删除元素 D)没有共同点
15.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为( )。
A)12 √B)33 C)18 D)40
16.设A是n*n的对称矩阵,将A的对角线及对角线上方的元素以列为主的次序存放在一维数组B[1,n(n+1)/2]中,对上述任一元素aij(1≤i,j≤n,且i≤j)在B中的位置为( )。
A)i(i-l)/2+j B)j(j-l)/2+i √C)j(j-l)/2+i-1 D)i(i-l)/2+j-1
17.由3个结点可以构造出多少种不同的二叉树?
( )
A)2 B)3 C)4 √D)5
18.二叉树中第i(i≥1)层上的结点数最多有( )个。
A)2iB)2i√C)2i-1D)2i-1
19.在有n个叶子结点的哈夫曼树中,其结点总数为( )。
A)不确定B)2nC)2n+1√D)2n-1
20.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是( )。
A)9 √B)11 C)15 D)不确定
21.树的后根遍历序列等同于该树对应的二叉树的( )。
A)先序序列 √B)中序序列 C)后序序列D)层序序列
22.在下列存储形式中,哪一个不是树的存储形式?
( )
A)双亲表示法 B)孩子链表表示法C)孩子兄弟表示法√D)顺序存储表示法
23.在二叉树结点的先序序列,中序序列和后序序列中,所有叶子结点的先后顺序( )。
A)都不相同 √B)完全相同
C)先序和中序相同,而与后序不同 D)中序和后序相同,而与先序不同
24.下列哪一种图的邻接矩阵是对称矩阵?
( )
A)有向图 √B)无向图 C)AOV网 D)AOE网
25.在一个无向图中,所有顶点的度数之和等于所有边数( 2 )倍,在一个有向图中,所有顶点的入度之和等于所有顶点出度之和的( 1 )倍。
A)1/2 √B)2 √C)1 D)4
26.一个有n个顶点的无向图最多有( )条边。
由n个顶点组成的有向图,最多可以有( )条边。
A)n*nB)2n√C)n(n-1)√D)n(n-1)/2
27.下面哪一方法可以判断出一个有向图是否有环(回路)( )。
A)深度优先遍历 √B)拓扑排序 C)求最短路径 D)求关键路径
28.下列算法中,( )算法用来求图中每对顶点之间的最短路径。
A)Dijkstra√B)FloyedC)PrimD)Kruskal
29.关键路径是事件结点网络中( )。
√A)从源点到汇点的最长路径 B)从源点到汇点的最短路径
C)最长回路 D)最短回路
30.若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL为( )。
A)(n-1)/2 B)n/2 √C)(n+1)/2 D)n
31.下面关于二分查找的叙述正确的是 ( )。
A)表必须有序,表可以顺序方式存储,也可以链表方式存储
B)表必须有序,而且只能从小到大排列
C表必须有序且表中数据必须是整型,实型或字符型
√D)表必须有序,且表只能以顺序方式存储
32.下面关于哈希(Hash,杂凑)查找的说法正确的是( )。
A)哈希函数构造的越复杂越好,因为这样随机性好,冲突小
B)除留余数法是所有哈希函数中最好的
√C)不存在特别好与坏的哈希函数,要视情况而定
D)若需在哈希表中删去一个元素,不管用何种方法解决冲突都只要简单的将该元素删去即可
33.下面给出的四种排序法中( )排序法是不稳定性排序法。
A)插入 B)冒泡 C)二路归并 √D)堆
34.稳定的排序方法是( )。
A)直接插入排序和快速排序 √B)折半插入排序和起泡排序
C)简单选择排序和四路归并排序 D)树形选择排序和shell排序
35.有一组数据(15,9,7,8,20,-1,7,4)用快速排序的划分方法进行一趟划分后数据的排序为( )(按递增序)。
√A)下面的B,C,D都不对。
B)9,7,8,4,-1,7,15,20
C)20,15,8,9,7,-1,4,7 D)9,4,7,8,7,-1,15,20
36.快速排序在最坏情况下的时间复杂性为( )。
A)O(nlog2n)√B)O(n2)C)O(n)D)O(nlogn)
二、填空
1.一个算法的效率可分为时间效率和空间效率。
2.线性表L=(a1,a2,…,an)用数组表示,假定插入、删除表中任一元素的概率相同,则插入、删除一个元素平均需要移动元素的个数是n/2和(n-1)/2。
3.对于一个具有n个结点的单链表,在已知的结点*p后插入一个新结点的时间复杂度为O
(1),在给定值为x的结点后插入一个新结点的时间复杂度为O(n)。
4.顺序存储结构是通过元素在计算机内“物理位置相邻”表示元素之间的逻辑关系的,链式存储结构是通过指针表示元素之间的逻辑关系的。
5.带头结点的双循环链表L为空表的条件是:
p->next==head。
6.顺序栈S用data[1))n]存储数据,栈顶指针是top,则值为x的元素入栈的操作是*top++=x。
7.已知链队列Q的头尾指针分别是f和r,则将值x入队的操作序列是p->data=x;p->next=NULL;r->next=p;r=p;。
8.稀疏矩阵的存储策略是只存储非零元素。
9.稀疏矩阵的存储方法主要有两个:
一个是三元组,另一个是十字链表示法。
10.二叉树由根,左子树、右子树三个基本单元组成。
11.线索二叉树的左线索指向其前驱右线索指向其后继。
12.设一棵Huffman树有6个叶结点,权值分别为3、4、7、14、15、20,则根节点的权值是63。
13.在有n个结点的二叉链表中,空链域的个数为n+1。
14.若用n表示图中顶点数目,则有n*(n-1)/2条边的无向图成为完全图。
15.设无向图G有n个顶点和e条边,每个顶点Vi的度为di(1<=i<=n〉,则e=
。
16.在图G的邻接表表示中,每个顶点邻接表中所含的结点数,对于无向图来说等于该顶点的度;对于有向图来说等于该顶点的出度。
17.顺序查找n个元素的顺序表,若查找成功,则比较关键字的次数最多为n次;当使用监视哨时,若查找失败,则比较关键字的次数为n+1。
18.在顺序表(8,11,15,19,25,26,30,33,42,48,50)中,用二分(折半)法查找关键码值20,需做的关键码比较次数为4。
19.已知二叉排序树的左右子树均不为空,则左子树上所有结点的值均小于它的根结点值,右子树上所有结点的值均大于它的根结点的值。
20.动态查找表和静态查找表的重要区别在于前者包含有插入和删除运算,而后者不包含这两种运算。
21.为了能有效地应用HASH查找技术,必须解决的两个问题是设计一个好的哈希函数和选择一个处理冲突的方法。
22.属于不稳定排序的有希尔、快速、选择、堆排序。
23.对n个记录的表r[1,n]进行简单选择排序,所需进行的关键字间的比较次数为n*(n+1)/2。
24.快速排序算法的时间复杂度为O(n2)。
i
j
v
1
3
18
2
1
3
3
4
24
5
3
66
三、应用题
1.试画出下列稀疏矩阵的三元组表示。
稀疏矩阵
2.二叉树有哪几种基本形态?
画图说明之。
解答:
5种。
NULL
3.
写出下列二叉树的前序,中序,后序遍历序列及对应的森林。
解答:
前序:
-+a*bc/de
中序:
a+b*c-d/e
后序:
abc*+de/-
4.设一棵二叉树的先序、中序遍历序列分别为
先序遍历序列:
ABDFCEGH 中序遍历序列:
BFDAGEHC
(1)画出这棵二叉树。
(2)画出这棵二叉树的后序线索树。
(后序:
FDBGHECA)
(3)将这棵二叉树转换成对应的树(或森林)。
5.已知二叉树的中序和后序遍历序列如下,试构造该二叉树。
中序:
ACBDHGEF
后序:
ABCDEFGH
6.试将森林F={T1,T2,T3,T4}转换为一棵二叉树。
T1T2T3T4
解答:
7.画出下列二叉树对应的先序、中序、后序线索二叉树存储结构。
8.已知叶子结点值2,3,5,6,9,11,构造哈夫曼树,计算其带权路径长度。
解答:
L=2*4+3*4+3*5+11*2+6*2+9*2=87
9.设一棵树T中边的集合为{(A,B),(A,C),(A,D),(B,E),(C,F),(C,G)},要求用孩子兄弟表示法(二叉链表)表示出该树的存储结构并将该树转化成对应的二叉树。
解答:
10.已知有向
11.
12.
13.=(V,E),其中V={V1,V2,V3,V4,V5,V6,V7}, E={,,,,,,,,},G的拓扑序列是( )。
∞
2
5
3
∞
∞
∞
∞
∞
2
∞
∞
8
∞
∞
∞
∞
1
3
5
∞
∞
∞
∞
∞
5
∞
∞
∞
∞
∞
∞
∞
3
9
∞
∞
∞
∞
∞
∞
5
∞
∞
∞
∞
∞
∞
∞
14.有7个顶点(v1,v2,v3,v4,v5,v6,v7)
的有向图的邻接矩阵如右图。
请回答相关问题:
(1)
画出该有向图。
解答:
(2)写出从v1出发的深度优先遍历和广度优先遍历序列。
深度优先遍历:
V1V2V6V7V3V4V5
广度优先遍历:
V1V2V3V4V6V5V7
15.已知如图所示的有向图,请给出该图的:
(1)
顶点
1
2
3
4
5
6
入度
3
2
1
1
2
2
出度
0
2
2
3
1
3
每个顶点的入/出度;
(2)邻接矩阵;
(3)邻接表;
(4)
∞
∞
∞
∞
∞
∞
1
∞
∞
1
∞
∞
∞
1
∞
∞
∞
1
∞
∞
1
∞
1
1
1
∞
∞
∞
∞
∞
1
1
∞
∞
1
∞
邻接矩阵
逆邻接表。
0
1
∧
1
2
->
0
->
3
∧
2
3
->
1
->
5
∧
3
4
->
2
->
5
->
6
∧
4
5
->
0
∧
5
6
->
0
->
1
->
4
∧
邻接表
0
1
->
1
->
4
->
5
∧
1
2
->
2
->
5
∧
2
3
->
3
∧
3
4
->
1
∧
4
5
3
->
5
∧
5
6
->
2
->
3
∧
逆邻接表
13、下面的邻接表表示一个给定的无向图
(1)给出从顶点v1开始,对图G用深度优先搜索法进行遍历时的顶点序列;
(2)给出从顶点v1开始,对图G用广度优先搜索法进行遍历时的顶点序列。
解答:
深度优先:
v1v2v4v6v5v3
广度优先:
v1v2v3v4v5v6
16.
设无向图G(所下图所示),要求给出该图的深度优先和广度优先遍历的序列,找出下面网络的最小生成树。
解答:
深度优先:
:
ABDFCEG广度优先:
ABDCEFG
17.分别说明Huffman算法、Dijkstra算法、Prim算法、Kruskal算法的功能。
解答:
Huffman算法:
最优二叉树,树的带权路径最短。
Dijkstra算法:
求单源最短路径
Prim算法:
求最小生成树
Kruskal算法:
求最小生成树
18.
已知图G如图所示。
(1)画出图G的邻接表;
(2)画出从顶点1出发的深度优先生成树和广度优先生成树;
(3)写出图G的拓扑排序列;
解答:
(1)
0
1
->
1
->
2
->
3
∧
1
2
->
4
∧
2
3
->
4
->
5
∧
3
4
->
5
∧
4
5
->
5
->
6
∧
5
6
->
6
∧
6
7
∧
(2)
(3)1,2,3,4,5,6,7
19.已知AOE网如下,试求其关键路径。
要求写出计算过程。
解答:
1
2
3
4
5
6
ve
0
4
3
8
7
10
vl
0
4
4
8
9
10
20.试利用Dijkstra算法求下图中从顶点a到其他个顶点间的最短路径,写出执行算法过程中各步的状态。
a
b
c
d
e
f
g
a
0
15
2
12,11
∞,10
∞,6
∞,16,13
b
∞
0,15
∞
∞
6,21
∞
∞
+15
(6)
c
∞
∞
0,2
∞
8,10
4,6
∞
+2
(1)
d
∞
∞
∞
0,11
∞
∞
2,13
+11
(4)
e
∞
∞
∞
∞
0,10
∞
9,19
+10
(3)
f
∞
∞
∞
5,11
∞
0,6
10,16
+6
(2)
g
∞
4,17
∞
∞
∞
∞
0,13
+13
(5)
a
b
c
d
e
f
g
0
15
2
11
10
6
13
19、设一组记录的关键字为{4,5,7,2,1,3,6},请回答相关问题:
(1)按表中元素的顺序依次插入一棵初始为空的二叉排序树,画出插入完成后的二叉排序树,并求出在等概率情况下查找成功的平均查找长度。
(2)按表中元素的顺序进行插入生成一棵AVL树,画出该树。
并求出在等概率情况下查找成功的平均查找长度。
解答:
(1)
ASL=(1+2*2+3*3+4)/7=18/7
(2)
ASL=(1+2*2+3*4)/12=17/7
21.假定一个线性表为L=(18,75,60,43,54,90,46,31,58,73,15,34)进行散列存储,采用的Hash函数为H(K)=Kmod13,当发生冲突时用线性探测法处理冲突,设Hash表的表长为13,试构造Hash表,并求出平均查找长度。
解答:
0
1
2
3
4
5
6
7
8
9
10
11
12
34
54
15
43
18
31
46
60
58
75
73
90
6
1
2
1
1
2
1
1
4
1
4
1
ASL=(7+2*2+4*2+6)/12=25/12
22.用快速排序方法对下列整数序列进行排序,写出中间及最后结果。
[89,27,52,90,15,28,100,72]
解答:
一趟:
89[72,27,52,28,15,89,100,90]
二趟:
72[15,27,52,28,72]89[100,90]
三趟:
15[,27,52,28]7289[100,90]
四趟:
1527[,52,28]7289[100,90]
五趟:
1527[28,52]7289[100,90]
六趟:
152728527289[90,100]
23.序列{40,38,60,95,76,10,25,50,99}是堆吗?
若不是,首先创建一个堆,然后用堆排序方法进行从小到大排序。
要求写出主要过程。
解答:
四、算法设计题
1.从顺序表中删除重复的元素,并使剩余元素间的相对次序保持不变(采用顺序存储结构实现)。
Statusdeldup_sq(SqList&L)
{
intj=0,k;
if(L)length>0)
{
for(inti=1;i{
k=0;
while(k<=j&&L)elem[i]!
=L)elem[k])