数据结构复习题库Word下载.docx
《数据结构复习题库Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构复习题库Word下载.docx(27页珍藏版)》请在冰豆网上搜索。
(1)算法选用的策略、
(2)、问题的规模。
13、算法时间复杂度是算法中基本运算重复执行次数多少的量度。
记作O(n),空间复杂度作为实现算法所需的辅助存储空间的大小,记作S(n)=O(f(n))。
1.2线性表
1、线性表是具有相同特性的数据元素的一个有限序列。
其特征有三:
所有元素类型相同、线性表是由有限个数据元素组织、线性表中的数据元素与位置有关的,这一点表明线性表不同于集合,线性表中的每一个元素都有一个对应的序号,线性表中元素可以重复出现。
2、线性结构特点:
有“头”元素有“尾”元素,中间的元素有“前驱”元素和“后继”元素。
3、线性表的顺序表示是指:
用一组地址连续的存储单元依次存放线性表中的数据元素。
4、对于一个长度为n的单链存储的线性表,在表头插入元素的时间复杂度为O
(1),在表尾插入元素的时间复杂度为O(n)。
5、在下面的数组a中链接存储着一个线性表,表头指针为a[o].next,则该线性表为____(38,56,25,60,42,74)。
a012345678
60
56
42
38
74
25
4
3
7
6
2
0
1
data
next
4、在以HL为表头指针的带表头附加结点的单链表和循环单链表中,判断链表为空的条件分别为__HL→next=NULL;
_和_HL=HL→next___。
1.3栈和队列
1、栈又称堆栈:
是一个受限的线性表,其限制是仅允许在表的一端进行插入与删除。
通常把对栈进行操作的一端称为栈顶,另一端称为栈底。
向栈顶插入一个新元素称为入栈或称进栈,从栈顶删除一个元素,称为出栈或退栈。
2、
队列的插入操作是在队列的队尾进行,删除操作是在队列的队首进行。
3、
当用长度为N的数组顺序存储一个栈时,假定用top==N表示栈空,则表示栈满的条件是top==0_。
4、后缀表达式运算规则:
运算符在式中出现的顺序恰为表达式的运算顺序,每个运算符和在它之前出现且紧靠它的两个操作数构成一个最小表达式。
5、中缀表达式a*(b+c)-d/f的后缀表达式是:
abc+*df/-。
6、当堆栈采用顺序存储结构时,栈顶元素的值可用S.stack[S.top]表示;
当堆栈采用链接存储结构时,栈顶元素的值可用HS→data表示。
1.4稀疏矩阵与广义表
1、稀疏矩阵的三元组表示法是指用非零元素所在的行、列以及值组成的三元组来表示一个非零元素
2、广义表A=(a,(b,c),((d,e),f)),则它的深度为4,它的长度为3。
1.5树
1、在一个树中存在唯一元素,这个元素称之为根元素;
除根结点外,每个结点有且仅有一个前驱结点;
包括根结点在内每个结点,可有任意多个(含0个)后继。
2、所谓后根遍历是指:
先按照从左到右的次序后根遍历根节点的每一个子树,再访问该根节点。
3、二叉排序树是指度为2的有序树。
一棵结点数为n的二叉树,其所有结点的度的总和是n-1。
4、对一棵二叉搜索树进行中序遍历时,得到的结点序列是一个有序序列。
对一棵由算术表达式组成的二叉树进行后序遍历得到的结点序列是该算术表达式的后缀表达式(或逆波兰式)。
5、对于一棵具有n个结点的二叉树,用二叉链表存储时,其指针总数为2n个,其中n-1个用于指向孩子,n+1个指针是空闲的。
6、若对一棵完全二叉树从0开始进行结点的编号,并按此编号把它顺序存储到一维数组A中,即编号为0的结点存储到A[0]中。
其余类推,则A[i]元素的左孩子元素为2i+1,右孩子元素为2i+2,双亲元素为(i-1)/2。
7、若用链表存储一棵二叉树时,每个结点除数据域外,还有指向左孩子和右孩子的两个指针。
在这种存储结构中,n个结点的二叉树共有2n_个指针域,其中有_n-1__个指针域是存放了地址,有n+1_个指针是空指针。
8、假定一棵树的广义表表示为A(B(C,D(E,F,G),H(I,J))),则树中所含的结点数为____10___个,树的深度为___4__,树的度为___3__,结点H的双亲结点为__B___,孩子结点为___I、J____。
1.6图
1、对于一个具有n个顶点和e条边的有向图和无向图,在其对应的邻接表中,所含边结点分别有___e__个和___2e___个。
2、假设一个连通图有n个顶点和e条边,其中n-1条边和n个顶点构成一个极小连通子图,称该极小连通子图为此连通图的生成树。
3、从已给的连通图中某一顶点出发,沿着一些边访遍图中所有的顶点,且使每个顶点仅被访问一次,这个过程就叫做图的遍历,图的遍历分为深度优先搜索遍历和广度优先搜索遍历两种。
4、在广度优先遍历过程中,仅从图来进行分析其访问顺序是不唯一的,而对于具体的邻接表而形成的遍历结果是一致的。
5、AOV网是一种有向无回路的图。
6、在一个具有n个顶点的无向完全图中,包含有_n*(n-1)/2___条边,在一个具有n个顶点的有向完全图中,包含有__n(n-1)__条边。
7、在一颗生成树中,再增加一条边,就会出现一条回路。
而在一颗生成树中再删除一个条边,就使得生成树变成非连通图,使生成树变成两个连通分量的非连通图。
8、从一顶点到另一顶点路径中经过的边权值之和称为带权路径长度;
n条路径中边权值之和最小的路径称为最短路径,该权值之和称为最短路径长度。
1.7查找
1、静态查找表是仅作查询和检索的查找表,静态查找表正常有以下几种形式:
顺序查找表、有序查找表、静态查找树表、索引顺序表
2、动态查找表主要是指:
若将“查询”结果为不在查找表中的元素插入查找表;
或者,从查找表中删除其“查询”结果为在查找表中的数据元素。
3、左、右子树深度之差的绝对值不大于1,称有这种特性的二叉树为平衡树。
4、B树中所有叶子结点均不带信息,且在树中的同一层次上(平衡的特性);
根结点或为叶子结点,或至少有两棵子树,其余非叶结点至少含有m/2棵子树,至多m棵子树。
5、B+树所有的叶结点都处于同一层次上,包含了全部关键码及指向相应数据对象存放地址的指针,且叶结点本身按关键码从小到大顺序链接
6、在一个索引文件的索引表中,每个索引项包含对应记录的索引值域和开始位置域两项数据。
1.8排序
1、当待排序的记录数较大,排序码较随机且对稳定性不作要求时,宜采用___快速_____排序;
当待排序的记录数较大,存储空间允许且要求排序是稳定时,宜采用__归并__排序。
2、在线性表的散列存储中,处理冲突的常用方法有_开放定址法_和_链接法_两种。
3、假定一个线性表为(12,23,74,55,63,40),若按Key%4条件进行划分,使得同一余数的元素成为一个子表,则得到的四个子表分别为(12,40)、_()_、__(74)_和(23,55,63)。
4、在堆排序的过程中,对任一分支结点进行筛运算的时间复杂度为_O(log2n),整个堆排序过程的时间复杂度为_O(nlog2n)__。
二、选择题(12分,每题2分)
2.1绪论
1、
对一个算法的评价,不包括如下(B)方面的内容。
A.健壮性和可读性B.并行性C.正确性D.时空复杂度
2、若需要利用形参直接访问实参时,应将形参变量说明为(D)参数。
A.值B.函数C.指针D.引用
3、下面各项中属于逻辑结构的是:
(B)。
A、哈希表、B有序表、C单链表、D、顺序表。
4、下面述语中,与数据的存储结构无关的是(B)
A、环形队列B、栈C、散列表C、单链表。
5、在计算机的存储器中表示时,各元素的物理地址与逻辑地址的相对顺序相同并且是连续的,称之为(B)
A、逻辑结构B、顺序存储结构C链式存储结构D、以上都对。
6、可以用(D)定义一个完整的数据结构。
A、数据元数B、数据对象C、数据关系D、抽象数据类型
7、(B)不是算法的基本特性。
A、可行性B、长度有限C、在规定的时间内完成D、确定性
8、某算法的时间复杂度为O(N*N)表明该算法的(C)。
A、问题规模B、执行时间等于N*N
C、执行时间与(N*N)成正比D、问题规模与(N*N成正比)
9、一个算法的执行时间为T(n)=(3n*n+2nlogn+4n-7)/(10n),其时间复杂度为(D)。
A、O(3n*n)B、O(2nlogn)C、(3n/10)D、O(n)
2.2线性表
1、以下(B)是一个线性表。
A、由n个实数组成的集合B、由100个字符合组成的序列
C、由所有整数组成的序列D、邻接表
解:
选项A中指定的实数集合不是序列,选项C中所含的元素无究,选项D属于存储结构。
2、在线性表中,除了开始元素外,每个元素(A)
A、只有唯一的前趋元素B、只有唯一的后继元素
C、有多个前趋D、有多个后继元素
3、顺序表的优点是(A)
A、存储密度大B、插入运算方便
C、删除运算方便D、可方便地用于各种逻辑结构的存储表示
4.
在带有头结点的单链表HL中,要向表头插入一个由指针p指向的结点,则执行(A)。
A、p->
next=HL->
next;
HL->
next=p;
B、p->
next=HL;
HL=p;
C、p->
p=HL;
D、HL=p;
p->
5.
对线性表,在下列哪种情况下应当采用链表表示?
(B)
A、经常需要随机地存取元素B、经常需要进行插入和删除操作
C、表中元素需要占据一片连续的存储空间D、表中元素的个数不变
2.3栈和队列
1.
将递归算法转换成非递归算法时,通常要借助的数据结构是(B)。
A、线性表B、栈
C、队列D、堆
2、链栈与顺序栈相比有一个明显的优点,即(B)。
A、插入操作更方便B、通常不会出现栈满的现象
C、不会出现栈空的现象D、删除操作更加方便
3、在环形队列中,数组的下标是0至N-1,其头尾指针分别为f和r,则其元素个数为(D)
A、r-fB、r-f-1
C、(r-f)%N+1D、(r-f+N)%N
4、
栈和队列的共同特点是(A)。
A、只允许在端点处插入和删除元素B、都是先进后出
C、都是先进先出D、没有共同点
2.4稀疏矩阵
1、在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点都具有相同的(A)。
A.行号B.列号
C.元素值D.非零元素个数
2、对特殊矩阵采用压缩存储的目的主要是为了(D)
A、表达变得简单B、对矩阵元素的存取变得简单
C、去掉矩阵中多除元素D、减少不必要的存储空间
3、设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每个元素占一个空间,问A[3][3](10)存放在什么位置是(C)。
脚注(10)表示用10进制表示。
A.688B.678C.692D.696
2.5树
1、树最适合用来表示(C)
A、有序数据元素B、无序数据元素
C、元素之间具有层次关系的数据D、元素之间无联系的数据
2、以下存储结构中,不是树的存储结构的是(D)
A、双亲存储结构B、孩子兄弟链存储结构
C、孩子链存储结构D、顺序存储结构
3、度为4,高度为h的树,则(A)
A、至少有h+3个节点B、至多有4h-1个节点
C、至多有4h个节点D、至少有h+4个节点
4、一棵满二叉树中共有n个节点,其中有m个叶子结点,高度为h,则(D)。
A、n=h+mB、n+m=2n
C、m=h-1D、n=2h-1
5、设二叉树有2n个节点,则m<
n,不可能存在(C)的节点。
A、n个度为0B、2m个度为0
C、2m个度为1C、2m个度为2
由二叉树的性质可知,节点总数2n=n0+n1+n2,n0=n2+1,2n=2n2+1+n1所以n1为奇数。
6、在任何一棵二叉树中,如果节点a有左孩子b、右孩子c,则在节点的先序序列、中序序列和后序序列中(C)
A、节点b一定在节点a的前面B、节点a一定在节点c的前面
C、节点b一定在节点c的前面D、节点a一定在节点b的前面
7、若唯一地确定一棵二叉树,只须知道二叉树的(C)。
A、先序序列B、中序序列
C、中序和后序序列D、先序和后序序列
8、一棵二叉树的中序序列为ABDCEFG,后序序列为BDCAFGE,由其左子树中的节点个数为(C)。
A、3B、2
C、4D、5
9、由权值分别为11,8,6,2,5的叶子结点生成一棵哈夫曼树,它的带权路径长度为(B)
A24B71C44D53
2.6图
1、AOV网是一种(D)。
A、有向图B、无向图C、无向无环图D、有向无环图
2、设有6个结点的无向图,该图至少应有(A)条边才能确保是一个连通图。
A、5B、6C、7D、8
3、以下数据结构中哪一个是非线性结构?
(C)
A、队列 B、栈C、图D、线性表
4、如果从无向图的任一顶点出发,进行一次深度优先遍历即可访问所有顶点,则该图一定是(B)
A、完全图B、连通图C、有回路D、一棵树
5、对于采用邻接表存储的图,其深度优先遍历算法类似于二叉树的(A)算法。
A、先序遍历B、中序遍历C、后序遍历D、按层遍历
6、对于采用邻接表存储的图,其广度优先遍历算法类似于二叉树的(D)算法。
7、判断一个有向图是否存在回路,除了可以利用拓扑排序方法外,还可以利(C)。
A、求关键路径的方法B、求最短路径的Dijkstra方法
C、深度优先遍历算法D、广度优先遍历算法
对每个访问的顶点做标记,若深度优先遍历访问到已标记的项点,说明存在回路。
8、以下叙述正确的是(A)
A、最短路径一定是简单路径;
B、Dijkstra算法不适合有回路的带权图求最短路径;
C、Dijkstra算法不适合求任意两个顶点的最短路径;
D、Floyd算法求两个顶点的最短路径时,pathk-1一定是pathK的子集。
Floyd算法求两个顶点的最短路径时,当最短路径发生更改时,pathk-1就不是pathK子集。
2.7查找
1、从二叉搜索树中查找一个元素时,其时间复杂度大致为(C)。
A.O(n)B.O
(1)C.O(log2n)D.O(n2)
2、在一个长度为n的顺序线性表中顺序查找值为x的元素时,查找成功时的平均查找长度(即x与元素的平均比较次数,假定查找每个元素的概率都相等)为(C)。
AnBn/2C(n+1)/2D(n-1)/2
3、顺序查找法适合于存储结构为(B)的线性表。
A、哈希存储B、顺序存储或链式存储
C、压缩存储D、索引存储
4、采用折半查找方法查找长度为n的线性表时,每个元素成功查找的平均查找长度为(D)。
A、O(n2)B、O(n*log2n)
C、O(n)D、O(log2n)
2.8排序
1、快速排序在最坏情况下的时间复杂度为(D)。
A.O(log2n)B.O(nlog2n)C.0(n)D.0(n2)
2、采用开放定址法处理散列表的冲突时,其平均查找长度(B)。
A.低于链接法处理冲突B.高于链接法处理冲突
C.与链接法处理冲突相同D.高于二分查找
3、希尔排序是一种(B)排序
A.选择B.插入
C.交换D.基数
4、对于线性表(7,34,55,25,64,46,20,10)进行散列存储时,若选用H(K)=K%9作为散列函数,则散列地址为1的元素有(D)个,
A.1B.2C.3D.4
5
对n个记录的文件进行快速排序,所需要的辅助存储空间大致为(C)。
A.O
(1) B.O(n) C.O(1og2n)D.O(n2)
三、算法描述题(28分,每题7分)
1、已知一棵二叉树的前序遍历的结果序列是ECBDIGFHKL,中序遍历的结果是BCDEFGHIKL,试写出这棵二叉树的后序遍历结果,并回答这是一种什么树。
答:
后序为BDCFHGLKIE,这是一颗平衡二叉树。
2、如下图二叉排序树,试用两种方法表示将4号结点删除而形成的二叉排序树。
请画出图10的邻接矩阵和邻接表。
邻接矩阵:
邻接表如图11所示:
图11
4、已知权值W={5,6,2,9,7},请按构造哈夫曼树的要求,构造一颗哈夫曼树。
010011
5、已知一个图的顶点集V和边集E分别为:
V={1,2,3,4,5,6,7};
E={(1,2)3,(1,3)5,(1,4)8,(2,5)10,(2,3)6,(3,4)15,(3,5)12,(3,6)9,(4,6)4,
(4,7)20,(5,6)18,(6,7)25};
用克鲁斯卡尔算法得到最小生成树,试写出在最小生成树中依次得到的各条边。
用克鲁斯卡尔算法得到的最小生成树为:
(1,2)3,(4,6)4,(1,3)5,(1,4)8,(2,5)10,(4,7)20
6、画出向小根堆中加入数据4,2,5,8,3时,每加入一个数据后堆的变化。
4
2
5
8
3
图12
7、已知一组记录的排序码为(46,79,56,38,40,80,95,24),写出对其进行快速排序的每一次划分结果。
划分次序
划分结果
第一次
[382440]46[56809579]
第二次
24[3840]46[56809579]
第三次
24384046[56809579]
第四次
2438404656[809579]
第五次
243840465679[8095]
第六次
2438404656798095
8、一个线性表为B=(12,23,45,57,20,03,78,31,15,36),设散列表为HT[0..12],散列函数为H(key)=key%13并用线性探查法解决冲突,请画出散列表,并计算等概率情况下查找成功的平均查找长度。
0123456789101112
78
15
03
57
45
20
31
23
36
12
查找成功的平均查找长度:
ASLSUCC=14/10=1.4
四、阅读程序回答问题(16分,每题8分)
1、假定从键盘上输入一批整数,依次为:
786345309134–1,请写出输出结果。
#include<
iostream.h>
stdlib.h>
consstintstackmaxsize=30;
typedefintelemtype;
structstack{
elemtypestack[stackmaxsize];
inttop;
};
voidmain()
{
stacka;
initstack(a);
//a初始化正确
intx;
cin>
>
x;
while(x!
=-1){
push(a,x);
}
while(!
stackempty(a))
cout<
<
pop(a)<
””;
cout<
end1;
该算法的输出结果为:
_____349130456378__.
2、阅读以下二叉树操作算法,指出该算法的功能。
Template<
calsstype>
voidBinTree<
Type>
:
:
unknown(BinTreeNode<
*t)
{BinTreeNode<
Type>
*p=t,*temp;
if(p!
=NULL){
temp=p→leftchild;
p→leftchild=p→rightchild;
p→rightchild=temp;
unknown(p→leftchild);
undnown(p→rightchild);
}