数据结构复习题2学习资料Word格式文档下载.docx
- 文档编号:19118495
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:17
- 大小:117KB
数据结构复习题2学习资料Word格式文档下载.docx
《数据结构复习题2学习资料Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构复习题2学习资料Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
(14)S1="
good"
,S2="
,执行串连接函数ConcatStr(S1,S2)后的结果为(A)。
A."
goodmorning"
B."
goodmorning"
C."
GOODMORNING"
D."
GOODMORNING"
(15)S1="
,执行函数SubStr(S2,4,LenStr(S1))后的结果为(B)。
B."
ning"
go"
morn"
(16)设串S1="
ABCDEFG"
PQRST"
则ConcatStr(SubStr(S1,2,LenStr(S2)),SubStr(S1,LenStr(S2),2))的结果串为(D)。
A.BCDEFB.BCDEFGC.BCPQRSTD.BCDEFEF
(17)已知二维数组A[6][10],每个数组元素占4个存储单元,若按行优先顺序存放数组元素a[3][5]的存储地址是1000,则a[0][0]的存储地址是(B)。
A.872B.860C.868D.864
(18)在一棵具有五层的满二叉树中,结点的总数为(B)
A.16B.31C.32D.33
(19)具有64个结点的完全二叉树的深度为(C)
A.5B.6C.7
(20)具有n(n>
1)个结点的完全二叉树中,结点i(2i>
n)的左孩子结点是(D)。
A.2iB.2i+1C.2i-1D.不存在
(若2i<
=n,则答案为A)
(21)将一棵有100个结点的完全二叉树从上到下,从左到右依次对结点编号,根结点的编号为1,则编号为45的结点的左孩子编号为(B)。
A.46B.47C.90D.91
(22)将一棵有100个结点的完全二叉树从上到下,从左到右依次对结点编号,根结点的编号为1,则编号为49的结点的右孩子编号为(B)。
A.98B.99C.50D.100
(23)用5个权值{3,2,4,5,1}构造的哈夫曼树的带权路径长度是(B)。
A.32B.33C.34D.15
(先构造哈夫曼树,WPL=(1+2)*3+(3+4+5)*2=33)
(24)二叉树的叶结点个数比度为2的结点的个数(C)。
A.无关B.相等C.多一个D.少一个
(25)对于一个具有n个顶点的有向图的边数最多有(B)。
A.nB.n(n-1)C.n(n-1)/2D.2n
(26)在一个具有n个顶点的无向图中,要连通全部顶点至少需要(C)条边。
A.nB.n+1C.n-1D.n/2
(27)对于一个具有n个顶点和e条边的无向图,采用邻接表表示,则表头向量大小为(C)。
A.n-1B.n+1C.nD.n+e
(28)在图的表示法中,表示形式唯一的是(A)。
A.邻接矩阵表示法B.邻接表表示法
C.逆邻接表表示法D.邻接表和逆邻接表表示法
(29)对有14个元素的有序表A[1..14]作二分查找,查找元素A[4]时的被比较元素依次为(C)。
A.A[1],A[2],A[3],A[4]B.A[1],A[14],A[7],A[4]
C.A[7],A[3],A[5],A[4]D.A[7],A[5],A[3],A[4]
(30)不可能生成下图二叉排序树的关键字的序列是(A)。
A.45312B.42531C.45213D.42315
(31)排序方法中,从无序序列中选择关键字最小的记录,将其与无序区(初始为空)的第一个记录交换的排序方法,称为(D)。
A.希尔排序B.归并排序C.插入排序D.选择排序
(32)每次把待排序方的区间划分为左、右两个区间,其中左区间中元素的值不大于基准元素的值,右区间中元素的值不小于基准元素的值,此种排序方法叫做(C)。
A.冒泡排序B.堆排序C.快速排序D.归并排序
(33)直接插入排序的方法是从第(B)个元素开始,插入到前边适当位置的排序方法。
A.1B.2C.3D.n
(34)堆的形状是一棵(C)。
A.二叉排序树B.满二叉树C.完全二叉树D.平衡二叉树
(35)一组记录的排序码为(25,48,16,35,79,82,23,40),其中含有4个长度为2的有序表,按归并排序的方法对该序列进行一趟归并后的结果为:
(A)。
A,16253548234079823672B.16253548798223364072
C.16254835798223364072D.16253548792336407282
(36)一个数据序列的关键字为:
(46,79,56,38,40,84),采用快速排序,并以第一个数为基准得到第一次划分的结果为:
(C)
A.(38,40,46,56,79,84)B.(40,38,46,79,56,84)
C.(40,38,46,56,79,84)D.(40,38,46,79,56,84)
二、填空题
(1)若一个算法中的语句频度之和为T(n)=6n+3nlog2n,则算法的时间复杂度为O(nlog2n)。
(2)当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快速度存取线性表中的元素时,应采用顺序存储结构。
(3)对一个需要经常进行插入和删除操作的线性表,采用链式存储结构为宜。
(4)双链表中,设p是指向其中待删除的结点,则需要执行的操作为:
p->
prior->
next=p->
next。
(5)A+B/C-D*E的后缀表达式是:
ABC/+DE*-。
(6)解决顺序队列“假溢出”的方法是采用循环队列。
(7)循环队列的队首指针为front,队尾指针为rear,则队空的条件为front==rear。
(8)设循环队列的头指针front指向队首元素,尾指针rear指向队尾元素后的一个空闲元素,队列的最大空间为MAXLEN,则队满标志为:
front==(rear+1)%MAXLEN。
(9)设循环队列的容量为40(序号从0到39),现经过一系列的入队和出队运算后,有front=11,rear=19,则循环队列中还有8个元素。
(L=(N+rear-front)%N=(40+19-11)%40=8)
(10)设S="
MyMusic"
,则LenStr(s)=_8。
(11)两个字符串分别为:
S1="
Todayis"
30July,2005"
ConcatStr(S1,S2)的结果是:
Todayis30July,2005。
(12)求子串函数SubStr("
Todayis30July,2005"
13,4)的结果是:
July。
(13)在串的运算中,EqualStr(aaa,aab)的返回值为<
0。
(14)多维数组的顺序存储方式有按行优先顺序存储和按列优先顺序存储两种。
(15)在多维数组中,数据元素的存放地址可以直接通过地址计算公式算出,所以多维数组是一种随机存取结构。
(16)tail(head((a,b),(c,d))=b。
(17)设广义表((a,b,c)),则将c分离出来的运算是head(tail(tail(head(L))))
(18)广义表LS=(a,(b),((c,(d))))的长度是3。
(19)广义表LS=(a,(b),((c,(d))))的深度是4。
(21)广义表LS=(a,(b),((c,(d))))的表尾是((b),((c,(d))))。
(22)数组元素a[0..2][0..3]的实际地址上2000,元素长度是4,则LOC[1,2]=2024。
(23)n阶下三角矩阵,因为对角线的上方是同一个常数,需要n(n-1)/2+1个存储单元。
(24)稀疏矩阵的三元组有3列。
(25)稀疏矩阵的三元组中第1列存储的是数组中非零元素所在的行数。
(26)n阶对称矩阵,如果只存储下三角元素,只需要n(n-1)/2个存储单元。
(27)哈夫曼树是带权路径长度最小的二叉树。
(28)由二叉树的后序和中序遍历序列,可以唯一确定一棵二叉树。
(29)某二叉树的中序遍历序列为:
DEBAC,后序遍历序列为:
EBCAD。
则前序遍历序列为:
DABEC。
(30)设一棵二叉树结点的先序遍历序历为:
ABDECFGH,中序遍历序历为:
DEBAFCHG,则二叉树中叶结点是:
E、F、H。
(31)对于二叉树来说,第i层上至多有2i-1个结点。
(32)深度为h的二叉树至多有2h-1个结点。
(33)采用二叉链表存储的n个结点的二叉树,一共有2n个指针域。
(34)采用二叉链表存储的n个结点的二叉树,共有空指针n+1个。
(35)将一棵完全二叉树按层次编号,对于任意一个编号为i的结点,其左孩子结点的编号为:
2*i。
(36)图常用的存储方式有邻接矩阵和邻接表等。
(37)图的遍历有:
深度优先搜和广度优先搜等方法。
(38)设有一稀疏图G,则G采用_邻接表____存储比较节省空间。
(39)设有一稠密图G,则G采用_邻接矩阵____存储比较节省空间。
(40)在关键字序列(7,10,12,18,28,36,45,92)中,用二分查找法查找关键字92,要比较4次才找到。
(41)二叉排序树是一种动态查找表。
(42)哈希表是按散列存储方式构造的存储结构
(43)哈希法既是一种存储方法,又是一种查找方法。
(44)散列表的查找效率主要取决于散列表造表时选取的散列函数和处理冲突的方法。
三、程序填空
(1)在带头结点head的单链表的结点a之后插入新元素x,试完成下列程序填空。
structnode
{elemtypedata;
node*next;
};
voidlkinsert(node*head,elemtypex)
{node*s,*p;
s=newnode;
s->
data=x;
p=head->
next;
while(p!
=NULL)&
&
(p->
data!
=a)
____p=p->
next;
if(p==NULL)
cout<
<
"
不存在结点a!
;
else{_____s->
next______;
___p->
next=s__________;
}
(2)假定用一个循环单链表表示一个循环队列,该队列只设一个队尾指针rear,试填空完成向循环队列中插入一个元素为x的结点的函数。
typedefstructqueuenode//定义队列的存储结构
{intdata;
structqueuenode*next;
}QueueNode;
InQueue(QueueNode*rear,intx)//向队列插入元素为x的函数
{QueueNode*rear;
QueueNode*head,*s;
s=newQueueNode;
s->
if(rear==NULL)//循环队列为空,则建立一个结点的循环队列
{rear=s;
rear->
}
else
{head=rear->
//循环队列非空,则将s插到后面
rear->
next=s;
rear=s;
next=head;
(3)下面程序是把两个串r1和r2首尾相连的程序,即:
r1=r1+r2,试完成程序填空。
typedefStruct
{charvec[MAXLEN];
//定义合并后串的最大长度
intlen;
//len为串的长度
}St;
voidConcatStr(Str*r1,Str*r2)//字符串连接函数
{inti;
cout<
r1->
vec<
r2->
vec;
if(r1->
len+r2->
len>
MAXLEN)
cout<
"
两个串太长,溢出!
else
{for(i=0;
i<
r2->
len;
i++)//把r2连接到r1
r1->
vec[r1->
len+i]=r2->
vec[i];
vec[r1->
len+i]='
\0'
;
//添上字符串结束标记
len=r1->
//修改新串长度
}
(4)下面算法是判断字符串是否为回文(即正读和倒读相同),试完成程序填空。
#include"
stdio.h"
typedefstruct
intlen;
}str;
voidPalindrome(strs)
{inti=0;
ingj=s.len-1;
while(j-i>
=1)
{if(s.vec[i]==s.vec[j])
{i++;
j--;
continue}//(或j=j+1)
else
break;
if(j-i>
Itisnotapalindrome\n"
Itisapalindrome\n"
(5)voidBInsSort()//按递增序对R[1]~R[n]进行二分插入排序
{inti,j,low,high,m;
for(i=2;
=n;
i++)
{R[0]=R[i];
//设定R[0]为监视哨
low=1;
high=n;
while(low<
=high)
{m=(low+high)/2;
if(R[0]<
R[m])
high=m-1;
else
low=m+1;
for(j=i-1;
j>
=high+1;
j--)
R[j+1]=R[j];
//元素后移
R[high]=R[0];
//插入
四、应用题
(1)已知一棵二叉树的后序遍历和中序遍历的序列分别为:
ACDBGIHFE和ABCDEFGHI。
请画出该二叉树,并写出它的前序遍历的序列。
解:
恢复的二叉树为:
其前序遍历的序列为:
EBADCFHGI
(2)把下列一般树转换为二叉树
①②
①②
(3)把下列森林转换为二叉树
①②③
(4)把下列二叉树还原为森林
还原后的二叉树为:
1
②③
(5)假设用于通信的电文仅由A、B、C、D、E、F、G8个字母组成,字母在电文中出现的频率分别为7,19,2,6,32,3,21,10。
试为这8个字母设计哈夫曼编码。
以权值:
2、3、6、7、10、19、21、32构造哈夫曼树:
(左子为0,右子为1。
)
(6)有向图如下图所示,画出邻接矩阵和邻接表
邻接矩阵
12345
邻接表
1
2
3
5
∧
4
(7)已知一个无向图有6个结点,9条边,这9条边依次为(0,1),(0,2),(0,4),(0,5),(1,2),(2,3),(2,4),(3,4),(4,5)。
试画出该无向图,并从顶点0出发,分别写出按深度优先搜索和按广度优先搜索进行遍历的结点序列。
从顶点0出发的深度优先搜索遍历的结点序列:
012345(答案不唯一)
从顶点0出发的广度优先搜索遍历的结点序列:
012453(答案不唯一)
(8)网G的邻接矩阵如下,试画出该图,并画出它的一棵最小生成树。
最小生成树:
811
108
34
13734
(9)对于给定结点的关键字集合K={5,7,3,1,9,6,4,8,2,10},
(1)试构造一棵二叉排序树;
(2)求等概率情况下的平均查找长度ASL。
(1)构造二叉排序树:
(2)ASL=(1*1+2*2+3*4+4*3)/10=2.9
(10)给定结点的关键字序列为:
19,14,23,1,68,20,84,27,55,11,10,79。
设散列表的长度为13,散列函数为:
H(K)=K%13。
试画出线性探测再散列解决冲突时所构造的散列表,并求出其平均查找长度。
线性探测再散列解决冲突时所构造的散列表:
6
7
8
9
10
11
12
14
68
27
55
19
20
84
79
23
①②①④③①①③⑨①①③
平均查找长度ASL=(1*6+2*1+3*3+4*1+9*1)/12=30/3=3
(11)给定结点的关键字序列为:
47,7,29,11,16,92,22,8,3,哈希表的长度为11。
设散列函数为:
H(K)=K%11。
试画出平方探测再散列解决冲突时所构造的散列表,并求出其平均查找长度。
平方探测再散列解决冲突时所构造的散列表。
22
47
92
16
29
①②②①①①①②②
平均查找长度ASL=(1*5+2*4)/9=13/9=5/3(或1.44)
(12)已知数据序列{12,02,16,30,28,10,17,20,06,18},写出希尔排序每一趟排序的结果。
(设d=5、2、1)
12021630281017200618
d=5
10021606181217203028
d=2
12021606171218203028
d=102061012161718202830
(13)已知数据序列{10,18,4,3,6,12,9,15},写出二路归并排序的每一趟排序结果。
[10][18][4][3][6][12][9][15]
[1018][34][612][915]第一趟排序结果
[341018][691215]第二趟排序结果
[346910121518]第三趟排序结果
(14)已知数据序列{53,36,48,36,60,7,18,41},写出采用简单选择排序的每一趟排序结果。
[533648366071841]
(7)[36483660531841]
(718)[483660533641]
(71836)[4860533641]
(7183636)[60534841]
(718363641)[534860]
(71836364148)[5360]
(7183636414853)[60]
(718363641485360)
(15)已知数据序列{10,1,15,18,7,15},试画出采用快速排序法,第一趟排序的结果。
1011518715
lowhigh
交换
711518[10]15
第一趟排序结果:
71[10]181515
五、程序设计
第二章一个,第六章一个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 复习题 学习 资料