数据结构复习题附答案.docx
《数据结构复习题附答案.docx》由会员分享,可在线阅读,更多相关《数据结构复习题附答案.docx(27页珍藏版)》请在冰豆网上搜索。
数据结构复习题附答案
一.是非题
1.数据构造(应该是抽象数据类型)可用三元式表示(D,S,P)。
其中:
D是数据对象,S是D上的关系,P是对D的根本操作集。
(f)
2简单地说,数据构造是带有构造的数据元素的集合。
(t)
3判断带头结点的非空循环单链表(头指针为L)中指针p所指结点是最后一个元素结点
的条件是:
p->next==L。
(t)
4线性表的链式存储构造具有可直接存取表中任一元素的优点。
(f)
5线性表的顺序存储构造优于链式存储构造。
(f)
6.在单链表P指针所指结点之后插入S结点的操作是:
P->next=S;S->next=P->next;。
(f)
(顺序弄反了S->next=P->next;P->next=S;)
7对于插入、删除而言,线性表的链式存储优于顺序存储。
(t)
8.顺序存储方式的优点是存储密度大,且插入、删除运算效率高。
(f)
9.栈与队列是操作上受限制的线性表。
(t)
10.队列是及线性表完全不同的一种数据构造。
(f)
(栈与队列是操作上受限制的线性表)
11.队列是一种操作受限的线性表,凡对数据元素的操作仅限一端进展。
(f)
(两端)
12.栈与队列也是线性表。
如果需要,可对它们中的任一元素进展操作。
(f)
(“如果需要,可对它们中的任一元素进展操作.〞这里的意思是在O
(1)的时间来读与改某个元素。
比方数组的直接索引。
栈:
如果需要,每一次只能对栈顶的元素进展操作
队列:
如果需要,每一次只能对两端,或者只能对队列头的元素进展操作。
)
13.栈是限定仅在表头进展插入与表尾进展删除运算的线性表。
(f)
14.二叉树中每个结点有两个子结点,而对一般的树,那么无此限制,所以,二叉树是树的
特殊情形。
(f)
(二叉树与树相互独立)
15二叉树是一棵结点的度最大为二的树。
(f)
(二叉树与树相互独立)
16赫夫曼树中结点个数一定是奇数。
(t)
17在二叉树的中序遍历序列中,任意一个结点均处在其左孩子结点的后面。
(t)
(LDR)
18假设B是一棵树,B′是对应的二叉树。
那么B的后根遍历相当于B′的后序遍历。
(f)
(后根遍历相当于中序遍历)
19.通常,二叉树的第i层上有2i-1个结点。
(f)
(应该为1~2i-1个)
20.中序线索二叉树的优点是便于在中序下查找直接前驱结点与直接后继结点。
(t)
21二叉树的先序遍历序列中,任意一个结点均处在其孩子结点的前面。
(t)
22由树结点的先根序列与后根序列可以唯一地确定一棵树。
(t)
23邻接多重表可以用以表示无向图,也可用以表示有向图。
(f)
(只能表示无向图,有向图用十字链表)
24可从任意有向图中得到关于所有顶点的拓扑次序。
(f)
(带环图没有)
25有向图的十字链表是将邻接表与逆邻接表合二为一的链表表示形式。
(t)
26关键路径是AOE网中源点到汇点的最短路径。
(f)
(最长)
27连通图G的生成树是一个包含G的所有n个顶点与n-1条边的子图。
(f)
〔极大连通子图〕
28一个无向图的连通分量是其极大的连通子图。
(t)
29十字链表可以表示无向图,也可用以表示有向图。
(f)
(有向图)
30邻接表可以表示有向图,也可以表示无向图。
(t)
31.二叉排序树的平均查找长度为O(logn)。
(t)
32.二叉排序树的最大查找长度及(LOG2N)同阶。
(f)
33选用好的HASH函数可防止冲突。
(f)
(无法防止,只能减少冲突)
34折半查找不适用于有序链表的查找。
(t)
(因链表地址不连续)
35.对于目前所知的排序方法,快速排序具有最好的平均性能。
(t)
36对于任何待排序序列来说,快速排序均快于冒泡排序。
(f)
(快速排序希望初始数据随机)
37在最坏情况下,堆排序的时间性能是O(nlogn),比快速排序好(t)
(堆排序及初始数据无关)
38快速排序具有最好的平均时间性能,它在任何时候的时间复杂度都是O(nlogn)。
(f)
(退化到n2)
39.字符串是数据对象特定的线性表。
(t)
40.空串及空格串是一样的。
(f)
(空串长度为0,空格串长度为其长度)
41.对于一棵m阶的B-
少有┌m/2┐个关键字。
(f)
(至少有m颗子树,关键字数目至少m-1)
42.当二叉排序树是一棵平衡二叉树时,其平均查找长度为O(log2n)。
(t)
43.广义表的表头与表尾都是广义表。
(f)
(表头可能是原子,也可能是列表,而其表尾必定为列表)
44二维数组是其数据元素为线性表的线性表。
(t)
选择题。
1从逻辑上可以把数据构造分成(c)。
A.动态构造与静态构造B.顺序组织与链接组织
C.线性构造与非线性构造D.根本类型与组合类型
2线性表L在(b)情况下适于使用链表构造实现。
A.不需修改L的构造B.需不断对L进展删除、插入
C.需经常修改L中结点值D.L中含有大量结点
3带头结点的单链表L为空的判断条件是b。
带头结点的循环链表L为空的判断条件是c。
A.L==nullB.L->next==null
C.L->next==LD.L!
=null
4假设顺序表中各结点的查找概率不等,那么可用如下策略提高顺序查找的效率:
假设找到指定
的结点,将该结点及其后继(假设存在)结点交换位置,使得经常被查找的结点逐渐移至
表尾。
以下为据此策略编写的算法,请选择适当的内容,完成此功能。
顺序表的存储构造为:
typedefstruct{
ElemType*elem;//数据元素存储空间,0号单元作监视哨
intlength;//表长度
}SSTable;
intsearch_seq(SSTableST,KeyTypekey)
{//在顺序表ST中顺序查找关键字等于key的数据元素。
//假设找到,那么将该元素及其后继交换位置,并返回其在表中的位置,否那么为0。
ST.elem[0].key=key;
i=ST.length;
while(ST.elem[i].key!
=key)f;
if(G)
{ST.elem[i]←→ST.elem[i+1];
e;
returni;
A.i>0
E.i++F.i--G.A与C同时满足H.B与D同时满足
5假设入栈顺序为A、B、C、D、E,那么以下(d)出栈序列是不可能的。
A.A、B、C、D、E B.B、C、D、A、E
C.C、D、B、E、A D.D、E、C、A、B
6递归程序可借助于(c)转化为非递归程序。
a.线性表b.队列c:
栈d.数组
7在以下数据构造中(c)具有先进先出(FIFO)特性,
(b)具有先进后出(FILO)特性。
a.线性表b.栈c.队列d.广义表
8假设对编号为1,2,3的列车车厢依次通过扳道栈进展调度,不能得到(e)的序列。
a:
1,2,3b:
1,3,2c:
2,1,3d:
2,3,1e:
3,1,2f:
3,2,1
9在计算递归函数时,如不用递归过程,应借助于(b)这种数据构造。
A.线性表B.栈C.队列D.双向队列
10假设带头结点的链表只设尾结点指针。
以下选择中(c)最适用于队列。
A)单链表B)双向链表C循环单链表D)双向循环链表
11栈与队列的一个共同点是(c)。
A.都是先进先出B.都是先进后出
C.只允许在端点处插入与删除元素D.没有共同点
12循环队列用数组A[0..m-1]存放其元素值,设头尾指针分别为front与rear,那么当前队列中
的元素个数是(c)。
A.rear-front-1B.Rear-front+1
C.(rear-front+m)%mD.Rear-front
13如下关于串的陈述中,正确的选项是(a,c)。
A.串是数据元素类型特殊的线性表B.串中的元素是字母
C.串中假设干个元素构成的子序列称为子串D.空串即为空格串
14对字符串s=’data-structure’执行操作replace(s,substring(s,6,8),’bas’)
的结果是(b)。
a:
‘database’b:
‘data-base’c:
‘bas’d:
‘data-basucture’
15设有二维数组A5x7,每一元素用相邻的4个字节存储,存储器按字节编址.
A的起始地址为100。
那么按行存储时,元素A06的第一个字节的地址是(d)
按列存储时,元素A06的第一个字节的地址是(a)
a:
220b:
200c:
140d:
124
16对广义表A=((a,(b)),(c,()),d)执行操作gettail(gethead(gettail(A)))
的结果是:
(b)。
a:
()b:
(())c:
dd:
(d)
gettail(A)=((c,()),d)
gethead(gettail(A))=(c,())
gettail(gethead(gettail(A)))=(())
17假设用于通讯的电文仅由6个字符组成,字母在电文中出现的频率分别为7,19,22,6,32,
14。
假设为这6个字母设计哈夫曼编码(设生成新的二叉树的规那么是按给出的次序从左至
右的结合,新生成的二叉树总是插入在最右),那么频率为7的字符编码是(g),频率
为32的字符编码是(c)。
a:
00b:
01c:
10d:
11
e:
011f:
110g:
1110h:
1111
(100)
/\(32)()
(19)(22)/\
(14)(13)
(7)(6)
18对二叉排序树(c)可得到有序序列。
a:
按层遍历b:
前序遍历c:
中序遍历d:
后序遍历
19设一棵二叉树BT的存储构造如下:
12345678
lchild23006000
dataABCDEFGH
rchild05408700
其中lchild,rchild分别为结点的左、右孩子指针域,data为结点的数据域。
那么
该二叉树的高度为(d);
第3层有(a)个结点(根结点为第1层)。
A.2B.3C.4D.5
(A)
(B)
(C)(E)
(D)(F)(H)
(G)
20先序遍历(DLR)图示二叉树可得到(a)的序列。
(A)
(B)(C)
(H)(D)(G)
(E)(F)
(I)
a)ABHDEFICG
b)HBEDFIACG
c)HEIFDBGCA
21在有n个结点的二叉树的二叉链表表示中,空指针数(b)。
2n-(n-1)
2n个指针域有效指针域
22假设某二叉树有20个叶子结点,有20个结点仅有一个孩子,那么该二叉树的总结点数是
(c)。
A.40B.55C.59D.61
n=n0+n1+n2=20+20+19
23某二叉树的先序遍历次序为abcdefg中序遍历次序为badcgfe,
那么该二叉树的后序遍历次序为(c)。
层次遍历次序为(a)。
a:
abcdefgb:
cdebgfac:
bdgfecad:
edcgfba
先序:
abcdefg谁先访问谁是根
DLR
中序:
badcgfe
LDR
(a)
(b)(c)
(d)(e)
(g)(f)
24图示的三棵二叉树中(c)为最优二叉树。
A)B)C)
ca
27
abcddb
752445
abcd
7524
最优二叉树->哈夫曼树
25某二叉树的后序遍历与中序遍历次序分别为DBFGECA与BDACFEG。
那么其先序遍历次序为(b),层次遍历次序为(a)。
a:
abcdefgb:
abdcefgc:
abcdfegd:
abcdegf
后序:
DBFGECA谁后访问谁是根
LRD
中序:
BDACFEG
LDR
(A)
(B)(C)
(D)(E)
(F)(G)
26某树的先根遍历次序为abcdefg后根遍历次序为cdebgfa。
假设将该树转换为二叉树,其后序遍历次序为(d)。
a:
abcdefgb:
cdebgfac:
cdegbfad:
edcgfba
先根:
abcdefg
后根:
cdebgfa
(a)
(b)(f)
(c)(d)(e)(g)
27设x与y是二叉树中的任意两个结点,假设在先根序列中x在y之前,而在后根序列中x
在y之后,那么x与y的关系是(c)。
A.x是y的左兄弟B.x是y的右兄弟
C.x是y的祖先(不一定是父子)D.x是y的子孙
28用三叉链表作二叉树的存储构造,当二叉树中有n个结点时,有(d)个空指针。
A.n-1B.nC.n+1D.n+2
三叉链表:
较二叉链表多一双亲指针域
二叉链表:
2n-(n-1)=n+1
2n个指针域有效指针域
根节点双亲指针必为空,故n+1+1=n+2
29对一棵完全二叉树进展层序编号。
那么编号为n的结点假设存在右孩子,其位序是(d)。
编号为n的结点假设存在双亲,其位置是(a)。
a:
n/2b:
2nc:
2n-1d:
2n+1e:
nf:
2(n+1)
30设森林F中有三棵树,第一、第二与第三棵树的结点个数分别为m1、m2与m3,那么及
森林F对应的二叉树根结点的右子树上的结点个数是(d)。
A.m1B.m1+m2C.m3D.m2+m3
(A)(B)(C)
m1m2m3
(A)
(左)(右)
m-1m2+m3
31以下二叉树中,(a)可用于实现符号不等长高效编码。
a:
最优二叉树b:
次优查找树c:
二叉平衡树d:
二叉排序树
哈夫曼树
32邻接表存储构造以下图的深度优先遍历算法类似于二叉树的( a)遍历。
A.先根 B.中根 C.后根 D.层次
33设无向图G=(V,E)与G’=(V’,E’),假设G’是G的生成树,那么下面不正确的说法是(b)。
A.G’是G的子图 B.G’是G的连通分量
C.G’是G的无环子图 D.G’是G的极小连通子图且V’=V
生成树:
极小
连通分量:
极大
34任何一个连通图的最小生成树(b)。
A.只有一棵B.有一棵或多棵C.一定有多棵D.可能不存在
35深度优先遍历图使用了数据构造(b),而广度优先遍历图使用了数据构造(c)。
A)数组B)栈C)队列D)线性表
DFS:
栈〔递归〕
BFS:
队列〔层次〕
36某有向图的邻接表存储构造如下图。
根据存储构造依教材中的算法其深度优先遍历次序为(d)。
广度优先遍历此序为(c)。
各强连通分量的顶点集为(h)。
a:
abcde.b:
edcba.c:
ecdab.d:
ecadb.
e:
abc及edf:
bc及aedg:
ab及cedh:
ac及bed
37以下查找方法中(a)适用于查找单链表。
A)顺序查找B)折半查找C)分块查找D)hash查找
38以下算法中(c)适用于求图的最小代价生成树。
(b)能对图作广度优先遍历。
A)DFS算法B)BFS算法C)Prim算法D)Dijkstra算法
39关键路径是指在只有一个源点与一个汇点的有向无环网中源点至汇点(c)的路径。
a:
弧的数目最多b:
弧的数目最少c:
权值之与最大d:
权值之与最小
40哈希表的查找效率取决于(d)。
a:
哈希函数b:
处理冲突的方法。
c:
哈希表的装填因子。
d:
以上都是
①哈希函数是否均匀;
②处理冲突的方法;
③哈希表的装填因子。
41在Hash函数H(k)=kMODm中,一般来说,m应取( c)。
A.奇数B.偶数C.素数D.充分大的数
素数可以有效的减少Hash冲突
42在顺序表查找中,为防止查找过程中每一步都检测整个表是否查找完毕,
可采用a方法。
43静态查找表与动态查找表的区别在于(b)。
A.前者是顺序存储,而后者是链式存储
B.前者只能进展查找操作,而后者可进展查找、插入与删除操作
C.前者只能顺序查找,而后者只能折半查找
D.前者可被排序,而后者不能被排序
动态查找表在查找过程中插入元素或者从查找表中删除元素
静态查找表只是查找特定元素或者检索特定元素的属性
最通俗的解释:
动态查找表可以对查找表构造进展修改,而静态查找表只是查询
44在一个含有n个元素的有序表上进展折半查找,找到一个元素最多要进展(b)次元素
比拟。
A.log2(n)B.log2(n)+1C.log2(n+1)D.log2(n+1)+1
折半查找每次都会把范围缩小一半,因为最后剩一个元素时,也要执行查找过程,所以+1。
每次二分 直到最后一次才找到 就会有 2k = n / 2 得到 k = log2n + 1
45设输入序列为20,45,30,89,70,38,62,19依次插入到一棵2-3树中(初始状态为空),
该B-树为(b)。
再删除38,该B-树为(f)。
〔3062〕〔45〕
〔19,20〕〔3845〕〔70,89〕〔30〕〔70〕
〔1920〕〔38〕〔62〕〔89〕
a:
b:
〔4570〕〔45〕
〔20〕〔62〕〔89〕〔20〕〔70〕
〔19〕〔30〕〔19〕(30,38〕〔62〕〔89〕
c:
d:
〔3070〕〔45〕
〔19,20〕〔4562〕〔89〕〔20〕〔70〕
〔19〕〔30〕〔62〕〔89〕
e:
f:
46根据插入次序(80,90,100,110,85,70,75,60,72)建立二叉排序树。
图(a)是最终变化的结果。
假设仍以该插入次序建立平衡二叉树。
图(c)是最
终变化的结果。
8080
70907590
607585100607085100
7211072110
a:
b:
9090
7510080100
7080110757085110
6072856072
c:
d:
47假设有序表中关键字序列为:
14,20,25,32,34,45,57,69,77,83,92。
对其进展
折半查找,那么在等概率情况下,查找成功时的平均查找长度是(c)。
查找32时需进
行(c)次比拟。
A.1B.2C.3D.4
48哈希表地址空间为A[9],哈希函数为H(k)=kmod7,采用线性探测再散列处理冲突。
假设依次将数据序列:
76,45,88,21,94,77,17存入该散列表中,那么元素17存储的下标为(h);
在等概率情况下查找成功的平均查找长度为(c)。
A.0B.1C.2D.3
E.4F.5G.6H.7
49假设从二叉树的根结点到其它任一结点的路径上所经过的结点序列按其关键字递增有序,
那么该二叉树是(c)。
A.二叉排序树B.赫夫曼树C.堆D.平衡二叉树
50当待排序序列的关键字次序为倒序时,假设需为之进展正序排序,以下方案中(d)为佳。
A.起泡排序B.快速排序
C.直接插入排序D.简单项选择择排序
51以下排序算法中,(d)算法可能会出现:
初始数据有序时,花费的时间反而最多。
A.堆排序B.起泡排序C.归并排序D.快速排序
52在以下排序方法中,(c)方法平均时间复杂度为0(nlogn),
最坏情况下时间复杂度为0(n2);(d)方法所有情况下时间复杂度均为0(nlogn)。
a.插入排序b.希尔排序c.快速排序d.堆排序
53一组待排序的记录关键字初始排列如下:
56,26,86,35,75,19,77,58,48,42
以下选择中(d)是快速排序一趟排序的结果。
(c)是希尔排序
(初始步长为3)一趟排序的结果。
(a)是初始堆(大堆顶)。
A)86,75,77,58,42,19,56,35,48,26.
B)26,56,35,75,19,77,58,48,42,86.
C)35,26,19,42,58,48,56,75,86,77.
D)42,26,48,35,19,56,77,58,75,86.
三.填空题
1数据构造通常有以下4类根本构造:
集合、线性构造、树型构造、图型构造。
2设单链表中结点形式为datanext,假设单链表长度大于等于2,指针p指向表中某个结点且p->next非空,此时假设要删除指针p所指的结点,可以通过如下方法进展:
将p所指结点的后继的元素值复制到该结点,然后删除其后继结点。
相应的语句序列为:
p->data = p->next->data;p->next = p->next->next;free(p ->next);;
3线性表的顺序存储构造是以数组下标来表示数据元素之间的逻辑关系的。
4P是单链表中某一结点的指针,P既不是首元结点也不是尾元结点,Q是P的前驱
结点指针。
当删除P结点时,链表的链接可用语句(q->next=p->next)实现。
5某树的先根遍历次序为abcdefg后根遍历次序为cdebgfa。
假设将该树转换为二叉树,其后序遍历次序为(edcgfba)。
层次遍历次序为(abcfdge)。
6某二叉树的先序遍历次序为afbcdeg中序遍历次序为cedbgfa。
其后序遍历次序为(edcgbfa)。
层次遍历次序为(afbcgde)。
7在二叉树的第i层上至少有1个结点,至多有2i-1个结点,
深度为k的二叉树至多有2i-1个结点.
8对树的遍历有先序遍历树与后序遍历树。
假设以二叉链表作树的存储构造,
那么树的先序遍历可借用二叉树的先序遍历算法来实现,
而树的后序遍历可借用二叉树的中序遍历算法