数据结构辅导资料Word格式.docx
《数据结构辅导资料Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构辅导资料Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
2.二叉树的定义及其重要性质★
3.满二叉树和完全二叉树的判断
4.二叉树的顺序表示和二叉链表
5.二叉树的遍历算法★
6.二叉树的线索化
7.树和森林与二叉树的转化
8.哈夫曼树和哈夫曼编码★
第七章图
1.图及其相关概念★
2.图的邻接矩阵表示和邻接表表示
3.图的深度和广度遍历算法
4.最小生成树的求解
5.有向无环图的拓扑排序
6.网络的最短路径求解★
第九章查找
1.查找表的概念,关键字,平均查找长度
2.顺序查找算法及其平均查找长度
3.折半查找及其平均查找长度、最佳分块长度★
4.二叉排序树及其构造,删除节点运算★
5.二叉平衡树的定义
6.B-树与B+树的定义及特点★
第十章排序
1.排序的定义,稳定性
2.直接插入,希尔,冒泡,快速,简单选择,归并排序和基数排序算法及其性能分析★
3.堆的定义,堆排序的基本思想,建堆操作
4.各种内部排序算法的比较及适用范围★
第十二章文件
1.文件及其几种常用的物理结构(顺序,索引,散列,多关键字文件)及其特点
2.索引文件的存储特征和ISAM文件和VSAM文件的定义
一、填空题
1.数据结构中评价算法的两个重要指标是_时间复杂度和空间复杂度。
2.数据元素之间的四类基本结构是:
集合、线性、树、图
3.数据结构包括数据的_逻辑结构_、数据的_存储结构_和数据的运算这三个方面的内容。
4.数据结构按逻辑结构可分为两大类,它们分别是_线形结构__和__非线形结构__
5.算法是对特定问题求解步骤的一种描述,它是指令的_有限序列_。
6.链表相对于顺序表的优点有_插入元素__和__删除元素___操作方便.
7.在一个带头结点的单循环链表中,p指向尾结点的直接前驱,则指向头结点的指针head可用p表示为head=_p->
next->
next___。
8.在双链表中,存储一个结点有三个域,一个是数据域;
另两个是指针域,分别指向前驱和后继.
9.当线性表的元素总数基本稳定,且很少进行插入和删除运算,但要求以最快的速度存取线性表中的元素时,应采用_顺序_存储结构。
10.对于一个具有n个结点的单链表,在已知的结点*p后插入一个新结点的时间复杂度为O
(1),在给定值为x的结点后插入一个新结点的时间复杂度为O(n)。
11.一个栈的输入序列是a、b、c,则不可能的栈输出序列是_cab__。
12.栈的特点是后进先出队列的特点是先进先出
13.在初始为空的堆栈中依次插入元素10,34,23,2,5,11,8以后,连续进行了三次删除操作,此时的栈顶元素是2
14.在队列结构中,允许插入的一端称为___队尾_____,允许删除的一端为__对头__。
15.一个队列的入队序列是a、b、c、d,则队列的输出序列为_abcd___。
16.在循环链队列中,设队头指针front指向队头元素前一个空闲元素,队尾指针rear指向队尾元素,那么队空标志为front==rear.
17.不含任何字符的串称为_空串_。
18.两个字符串相等的条件是当且仅当这两个字符串的值相等
19.在串S="
structure"
中,以t为首字符的子串有__12_____个。
20.广义表C=((((a),b)),(((),y))),则C的长度为__2___,深度为__4____,tail(head(tail(C)))=___()___。
21.若线性表采用顺序存储结构,每个元素占用四个存储单元,第一个元素的存储地址为100,则第12个元素的存储地址是100+(12-1)×
4=144。
22.已知二维数组A采用行序为主方式存储(n为列数),每个元素占K个存储单元,并且第一个元素的存储地址是LOC(A[0][0]),则A[i][j]的地址是_LOC(A[0][0])+(i×
n+j)×
k__。
23.广义表C=((x,(a,b)),((x,(a,b)),y)),则C的长度为___2_______,深度为____4______。
24.树T有n个结点且结点的度均为k或者0,则树中的叶子结点总数为:
_n-(n-1)/k__。
25.对于一棵满二叉树,若有m个叶子,则结点数为2m-1;
若满二叉树的结点数为n,则其高度为log2n+1.
26.已知一棵完全二叉树共有768个结点,则该树中有__384__个叶子结点。
27.高度为5的完全二叉树至少有16个结点。
28.树的三种主要的遍历方法是:
_前序遍历_、后序遍历_和层次遍历。
29.在一棵具有n个结点的完全二叉树中,从树根起,自上而下、自左到右地给所有旨点编号。
设根结点编号为1。
若编号为i的结点,有右孩子,那么其右孩子的编号为2i+1
30.森林的后序遍历序列正是相应二叉树的中序遍历序列,森林的先序遍历序列正是相应的先序遍历序列.
31.在有向图的邻接矩阵中,第i列的非零元个数就是第i个顶点的_入度度数_______。
32.设有一稀疏图G,则G采用邻接表(结构)存储较省空间。
33.具有5个顶点的无向完全图有_10___条边。
34.在有n个结点的无向图中,其边数最少为_n-1,最多为_n(n-1)/2
35.如果待排序序列已接近正序或逆序,则在快速排序、堆排序和归并排序之中,选用__堆排序________较为适当。
36.在插入排序,希尔排序,选择排序,快速排序,堆排序,归并排序和基数排序中,平均比较次数最少的排序算法是_基数排序___。
37.对长度为n的顺序表做折半查找,最多比较关键字_[log2n]+1_次。
38.在有序表(12,24,36,48,60,72,84)中二分查找关键字72时所需进行的关键字比较次数为_2_______。
39.在各种查找方法中,平均查找长度与结点个数n无关的查找方法是__哈希(散列)查找__.
40.Vsam文件的优点是:
动态的分配和释放存储空间,不需要文件进行重组,并能较快的对插入的记录进行查找。
二、单项选择题
1.算法指的是(D)
A.计算机程序B.解决问题的计算方法C.排序算法D.解决问题的有限运算序列
2.设函数f(n)=10n1.5+200nlgn,g(n)=5n1.5+500nlgn,则下列成立的式子是(c)
A.f(n)=O(nlgn)B.g(n)=O(nlgn)C.f(n)=O(g(n))D.f(n)=O(n2)
3.链接存储的存储结构所占存储空间(A)
A.分两部分,一部分存放结点值,另一部分存放结点间关系的指针
B.只有一部分,存放结点值
C.只有一部分,存储表示结点间关系的指针
D.分两部分,一部分存放结点值,另一部分存放结点所占单元数
4.单链表的存储密度(C)
A.大于1 B.等于1
C.小于1 D.不能确定
5.线性表采用链式存储时,结点的存储地址(B)
A.必须是不连续的B.连续与否均可
C.必须是连续的D.和头结点的存储地址相连续
6.将长度为n的单链表链接在长度为m的单链表之后的算法的时间复杂度为(C)
A.O(l)B.O(n)C.O(m)D.O(m+n)
7.频繁地对线性表进行插入和删除操作,该线性表应该采用___C____存储结构。
(A)散列(B)顺序(C)链式(D)任意
8.在一个单链表中,若p结点不是最后一结点,在p之后插入s结点,则执行___B__
A)s->
next=p;
p->
next=s;
B)s->
next=p->
next;
next=s
C)s->
p=s;
D)p->
s->
9.在表长为n的顺序表上做插入运算,平均要移动的结点数为(b)
A.nB.n/2 C.n/3 D.n/4
10.在双链表中某结点(已知其地址)前,插入一新结点,其所需的时间为( a )
A.O
(1)B.O(lgn) C.O(n) D.O(n2)
11.在长度为N的顺序表的第i个位置插入一个新元素的算法的平均时间复杂度为(b)
A.O
(1)B.O(N)C.O(log2N)D.O(i)
座位号
12.与顺序栈相比,链栈的主要优点是(d)
A.入栈操作更简便B.出栈操作更简便
C.不出现下溢D.不出现上溢
13.一个栈的入栈序列是1,2,3,4,5,则栈的不可能的出栈序列是(C)
A.54321B.45321
C.43512D.12345
14、判别一个循环队列Q(最多元素为M)为满队列的条件是C
A)Q.front=Q.rearB)Q.front!
=Q.rear
C)Q.front=(Q.rear+1)%MD)Q.front!
=(Q.rear+1)%M
15.设长度为n的链队列用循环链表示,若只设头指针,则出队操作的时间复杂度为(c)
A.O
(1)B.O(lgn) C.O(n) D.(n2)
16.在栈中存取数据的原则是(B)
A.先进先出 B.后进先出
C.后进后出 D.随意进出
17.递归算法转换成对应的非递归算法时,通常需要使用(A)。
A.栈B.队列
C.链表D.树
18.在队列中存取数据的原则是(A)
A.先进先出 B.后进先出C.先进后出 D.随意进出
19.在栈中,出栈操作的时间复杂度为(C)
A.O(n)B.O(log2n)C.O
(1)D.O(n2)
20.若字符串“1234567”采用链式存储,假设每个字符占用1个字节,每个指针占用2个字节,则该字符串的存储密度为(B)。
A.20%B.33.3% C.40% D.50%
21.串是一种特殊的线性表,其特殊体现在(B)。
A.可以顺序存储B.数据元素是一个字符
C.可以链接存储D.数据元素可以是多个字符
22.空串指的是 (b)
A.空白串 B.长度为零的串 C.长度为1的串 D.仅由空格组成的串
23.二维数组A[8][9]采用列优先存储方法,若每个元素各占2个存储单元,而且A[0][0]的地址为1000,则A[5][7]的地址为(a)
A.1122B.1234C.1212D.1120
24.一个非空广义表的表头(d)
A.不可能是子表B.只能是子表C.只能是原子D.可以是子表或原子
25.设n阶方阵是一个上三角矩阵,则需存储的元素个数是(D)
A.nB.n2C.n2/2D.n(n+1)/2
26.一个非空广义表的表头(D)
A.不可能是子表B.只能是子表
C.只能是原子D.可以是子表或原子
27.常对数组进行的两种基本操作是(C)。
A.建立与删除B.索引和修改C.存取和修改D.查找与索引
28.数组A中,每个元素A的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放在存储器内,存放该数到少需要的单元数是(C)。
A.80B.100C.240D.270
29.设稀疏矩阵A=10000按列优先顺序存储于三元组表,则结点
00-500
02060
00700
000010
(1,2,-5)是三元组表中的第(A)项。
A.2B.3C.4D.1
30.广义表((a),a)的表头是(C)。
A.a B.b C.(a) D.((a))
31.广义表A=((x,(a,b)),(x,(a,b),y)),则运算head(head(tail(A)))为(A)
A.x B.(a,b) C.(x(a,b))D.A
32.在一棵度为3的树中,度为3的结点个数为2,度为2的结点个数为1,则度为0的结点个数为(C)
A.4B.5C.6D.7
33.下图所示了4棵二叉树中C不是完全二叉树
(A)(B)(C)(D)
34.设高度为h的二叉树只有度为0和度为2的结点,则此类二叉树中所包含的结点数至少为__B______。
A)2hB)2h-1C)2h+1D)h+1
35.深度为h的完全二叉树至少有___C___个结点,至多有_B____个结点
A)2hB)2h-1C)2h-1D)2h-1-1
36.对于任何一棵二叉树T,如果其终端结点为n0,度为2的结点数为n2,则( a )
A.n0=n2+1 B.n2=n0+1
C.n0=2n2+1 D.n2=2n0+1
37.有m个叶结点的哈夫曼树所具有的结点数为 ( d )
A.m B.m+1 C.2m D.2m-1
38.已知某二叉树的后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是(D)。
A.acbed B.decab C.deabc D.cedba
39.根据二叉树的定义,具有3个结点的二叉树有( C )种树型。
A.3 B.4 C.5 D.6
40.若一棵二叉树有11个叶子结点,则该二叉树中度为2的结点个数是(b)
A.11B.10C.9D.不确定
41.在含n个顶点和e条边的无向图的邻接矩阵中,零元素的个数为(d)
A.eB.2eC.n2-eD.n2-2e
42.求解含n个顶点和e条边的无向图的最小生成树Prim算法时间复杂度为(A)
A.O(n2)B.O(n)C.O(e+n)D.O(elge)
43.具有n个顶点的无向图中,要连通全部顶点至少要___C___条边。
A)nB)n+1C)n-1D)n/2
44.有n个结点的无向图的边数最多为( b )
A.n+1 B.n(n-1)/2 C.n(n+1) D.2n(n+1)
45.任何一个无向连通图的最小生成树有(B)。
A.只有一棵 B.一棵或多棵 C.一定有很多棵 D.可能不存在
46.有8个结点的无向连通图最少有(C)条边。
A.5 B.6 C.7 D.8
47.用邻接表表示图进行深度优先遍历时,通常采用(B)来实现算法的。
A.队列 B.栈C.树D.图
47.要得到二叉排序树的结点的排序序列,应对该树进行(c)
A.层次遍历B.先序遍历C.中序遍历D.后序遍历
48.下面关于B-树和B+树的叙述中,不正确的是(b)
A.B-树和B+树都是平衡二叉树B.B-树和B+树都能有效地支持顺序检索
C.B-树和B+树都能有效地支持随机检索D.B-树和B+树都可用作文件的索引结构
49.适于对动态查找表进行高效率查找的组织结构是(C)
A.有序表B.分块有序表
C.二叉排序树D.线性链表
50.采用折半查找方法查找长度为n的线性表时,每个元素的平均查找时间复杂度为____D__
A)O(n)B)O(nlog2n)C)O(n2)D)O(log2n)
51.折半查找法适合于存储结构为(B)的线性表.
A.散列存储B.顺序存储C.压缩存储D.链接存储
52.设散列地址空间为0~m-1,k为关键字,用p去除k,将所得的余数作为k的散列地址,即H(k)=k%p。
为了减少发生冲突的频率,一般取p为(B)。
A.小于m的最大奇数 B.小于m的最大素数
C.小于m的最大偶数 D.小于m的最大合数
53.冒泡排序的时间复杂度是 ( a )
A.O(n2) B.O(nlog2n) C.O(n) D.O(log2n)
54.在已知待排文件基本有序的前提下,效率最高的排序方法是 (a )
A.直接插入排序 B.直接选择排序
C快速排序 D.归并排序
55.目前以比较为基础的内部排序方法中其比较次数于待排序的记录的初始排列状态无关的是(C).
A.插入排序 B.二分插入排序C.快速排序 D.冒泡排序
56.在以下排序方法中,平均时间复杂度为O(nlogn)且空间性能最佳的是(a)
A.堆排序B.归并排序C.基数排序D.快速排序
57.堆排序中堆的形状是一棵(C)。
A.二叉排序树B.满二叉树 C.完全二叉树 D.普通二叉树
58.散列文件的基本存储单位是(d)
A.物理记录B.逻辑记录C.桶D.页面
59.在索引顺序文件中(B)
A.主文件是无序的B.主文件是有序的
C.不适合随机存取D.索引是稠密索引
60.在索引非顺序文件中,建立的索引表是( D)
A.稀疏索引B.链接索引C.多级索引D.稠密索引
三、简答题
1.何为数据的逻辑结构?
何为数据的存储结构?
一般情况下,两者之间有什么联系?
这种联系是如何反映的?
答:
数据的逻辑机构是指数据元素之间的逻辑关系;
数据的存储结构是指数据元素及其关系在计算机存储器内的表示;
对于已经建立的逻辑结构是设计人员根据解题需要选定的数据组织形式,因此建立的机内表示应遵循选定的逻辑结构,所建立数据的机内表示称为数据存储结构。
2.数据结构是一门怎么样的学科?
抽象数据类型指的是什么?
数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。
抽象数据类型是指一个数学模型以及定义在模型上的一组操作。
3.什么是顺序队列中的“假上溢”?
有什么方法可以解决?
因为顺序队列的先进先出特征和存储向量空间的固定性,存在一种“假上溢”。
因为在出队和入队操作中,头尾指针都是只增加不减少,致使被删除的元素的空间永远无法重新利用。
因此,尽管队列中实际的元素个数小于向量空间规模,但也可能由于尾指针已超越向量空间的上界而不能做入队操作。
为了解决这种问题,可以把向量空间想象为一个首尾相连的原环,称为“循环队列”。
使用循环队列的最主要的技术问题是如何判断其“满”和“空”的状态。
我们可以有以下三种方法:
1)另设一布尔变量区别队列的空和满。
2)使用一个计数器记录队列中元素的总数(队列长度)
3)少用一个元素的存储空间,约定以“队列头指针在队列尾指针的下一位置上”(即尾指针在循环意义下加1后等于头指针。
注意尾指针rear所指单元始终为空)作为队列满的标志。
4.什么是递归程序?
递归程序的优、缺点是什么?
递归程序转换成非递归实现一般应借助于什么数据结构来完成?
一个函数在结束本函数之前,直接或间接调用函数自身,称为递归。
(2分)递归程序的优点是程序结构简单、清晰,易证明其正确性(1分)。
缺点是执行中占内存空间较多,运行效率低(1分)。
递归程序在执行中需借助栈这种数据结构来实现。
(2分)
5.特殊矩阵和稀疏矩阵哪一种压缩存储后会失去随机存储功能?
为什么?
请论述原因。
答:
稀疏矩阵压缩存储后会失去随机存储功能。
对于像带状矩阵和三角矩阵这样的特殊矩阵由于压缩存储时是将其存储在一个线性数组向量中,矩阵元素aij的下标i,j与它在向量中对应元素b[k]有一一对应关系,故不会失去随机存取功能。
而像稀疏矩阵其压缩存储的方式是将其非零元素存储在一个三元组中,以三元组数组a[k]形式存储,矩阵元素aij下标i,j与数组中对应元素a[k]行下标k无对应关系,故失去随机存储功能。
6.试比较求网的最小生成树的两个算法:
普尼姆(Prim)算法和克鲁斯卡尔(Kruskal)算法.
普里姆(Prim)算法
算法思想:
依次把连通网中与当前生成树中相连的权最小的边添加到生成树中。
时间复杂度:
O(n2),适合用于稠密图最小生成树求解。
克鲁斯卡尔(Kruskal)算法
算法思想:
依次把连通网中权最小的边添加到生成树中。
O(elge),适合用于稀疏图最小生成树求解。
7.什么是分块查找?
它有什么特点?
若一个表中共有625个元素,且每个元素的查找概念相同,那么在假定采用顺序查找来确定所有的块时如何分块最佳?
分块查找又称索引顺序查找,即把表分成若干个子表,对每个子表(或称块)建立一个索引项(关键字项和项指针),若干个索引项组成按关键字有序的“索引表”,块与块之间成了分块有序,这种查找时先查索引表,再查子表的方法成为分块查找。
其特点是索引项按关键字有序,可采用顺序查找或折半查找,而块中记录是任意排列的,则只能顺序查找。
当n=625时,每一个块中的记录个数s=n1/2时最佳,即s=(625)1/2=25。
四、应用解答题(每小题8分,共16分)
1.下述算法的功能是什么?
voidDemo(SeqList*L)
{//*L是一已知的顺序表
inti;
if(L->
length<
=0)Err