数据结构复习题及答案Word文件下载.docx
《数据结构复习题及答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构复习题及答案Word文件下载.docx(29页珍藏版)》请在冰豆网上搜索。
i++)
for(j=0;
j<
m;
j++)
a[i][j]=0;
(3)s=0;
fori=0;
for(j=0;
s+=B[i][j];
sum=s;
(4)i=1;
while(i<
=n)
i=i*3;
(5)x=0;
for(i=1;
for(j=1;
=n-i;
x++;
(6)x=n;
//n>
1
y=0;
while(x≥(y+1)*(y+1))
y++;
(1)O
(1)
(2)O(m*n)
(3)O(n2)
(4)O(log3n)
(5)因为x++共执行了n-1+n-2+……+1=n(n-1)/2,所以执行时间为O(n2)
(6)O(
)
第2章线性表
1.选择题
(1)一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是()。
A.110B.108C.100D.120
(2)在n个结点的顺序表中,算法的时间复杂度是O
(1)的操作是()。
A.访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n)
B.在第i个结点后插入一个新结点(1≤i≤n)
C.删除第i个结点(1≤i≤n)
D.将n个结点从小到大排序
(3)向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动的元素个数为()。
A.8B.63.5C.63D.7
(4)链接存储的存储结构所占存储空间()。
A.分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针
B.只有一部分,存放结点值
C.只有一部分,存储表示结点间关系的指针
D.分两部分,一部分存放结点值,另一部分存放结点所占单元数
(5)线性表若采用链式存储结构时,要求内存中可用存储单元的地址()。
A.必须是连续的B.部分地址必须是连续的
C.一定是不连续的D.连续或不连续都可以
(6)线性表L在()情况下适用于使用链式结构实现。
A.需经常修改L中的结点值B.需不断对L进行删除插入
C.L中含有大量的结点D.L中结点结构复杂
(7)单链表的存储密度()。
A.大于1B.等于1C.小于1D.不能确定
(8)将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是()。
A.nB.2n-1C.2nD.n-1
(9)在一个长度为n的顺序表中,在第i个元素(1≤i≤n+1)之前插入一个新元素时须向后移动()个元素。
A.n-iB.n-i+1C.n-i-1D.i
(10)线性表L=(a1,a2,……an),下列说法正确的是()。
A.每个元素都有一个直接前驱和一个直接后继
B.线性表中至少有一个元素
C.表中诸元素的排列必须是由小到大或由大到小
D.除第一个和最后一个元素外,其余每个元素都有一个且仅有一个直接前驱和直接后继。
(11)若指定有n个元素的向量,则建立一个有序单链表的时间复杂性的量级是()。
A.O
(1)B.O(n)C.O(n2)D.O(nlog2n)
(12)以下说法错误的是()。
A.求表长、定位这两种运算在采用顺序存储结构时实现的效率不比采用链式存储结构时实现的效率低
B.顺序存储的线性表可以随机存取
C.由于顺序存储要求连续的存储区域,所以在存储管理上不够灵活
D.线性表的链式存储结构优于顺序存储结构
(13)在单链表中,要将s所指结点插入到p所指结点之后,其语句应为()。
A.s->
next=p+1;
p->
next=s;
B.(*p).next=s;
(*s).next=(*p).next;
C.s->
next=p->
next;
next=s->
D.s->
(14)在双向链表存储结构中,删除p所指的结点时须修改指针()。
A.p->
next->
prior=p->
prior;
prior->
B.p->
prior=p;
C.p->
next=p;
D.p->
(15)在双向循环链表中,在p指针所指的结点后插入q所指向的新结点,其修改指针的操作是()。
next=q;
q->
prior=q;
C.q->
D.q->
第3章栈和队列
(1)若让元素1,2,3,4,5依次进栈,则出栈次序不可能出现在()种情况。
A.5,4,3,2,1B.2,1,5,4,3C.4,3,1,2,5D.2,3,5,4,1
(2)若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为()。
A.iB.n-iC.n-i+1D.不确定
(3)数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素个数的公式为()。
A.r-fB.(n+f-r)%nC.n+r-fD.(n+r-f)%n
(4)链式栈结点为:
(data,link),top指向栈顶.若想摘除栈顶结点,并将删除结点的值保存到x中,则应执行操作()。
A.x=top->
data;
top=top->
link;
B.top=top->
link;
x=top->
C.x=top;
D.x=top->
(5)设有一个递归算法如下
intfact(intn){
//n大于等于0
if(n<
=0)return1;
elsereturnn*fact(n-1);
}
则计算fact(n)需要调用该函数的次数为()。
A.
n+1
B.
n-1
C.n
D.n+2
(6)栈在
()中有所应用。
A.递归调用B.函数调用C.表达式求值D.前三个选项都有
(7)为解决计算机主机与打印机间速度不匹配问题,通常设一个打印数据缓冲区。
主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。
该缓冲区的逻辑结构应该是()。
A.队列B.栈C.线性表D.有序表
(8)设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5和e6依次进入栈S,一个元素出栈后即进入Q,若6个元素出队的序列是e2、e4、e3、e6、e5和e1,则栈S的容量至少应该是( )。
A.2B.3C.4D.6
(9)在一个具有n个单元的顺序栈中,假设以地址高端作为栈底,以top作为栈顶指针,则当作进栈处理时,top的变化为( )。
A.top不变B.top=0C.top--D.top++
(10)设计一个判别表达式中左,右括号是否配对出现的算法,采用( )数据结构最佳。
A.线性表的顺序存储结构B.队列
C.线性表的链式存储结构D.栈
(11)用链接方式存储的队列,在进行删除运算时( )。
A.仅修改头指针B.仅修改尾指针
C.头、尾指针都要修改D.头、尾指针可能都要修改
(12)循环队列存储在数组A[0..m]中,则入队时的操作为( )。
A.rear=rear+1B.rear=(rear+1)%(m-1)
C.rear=(rear+1)%mD.rear=(rear+1)%(m+1)
(13)最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是( )。
A.(rear+1)%n==frontB.rear==front
C.rear+1==frontD.(rear-l)%n==front
(14)栈和队列的共同点是( )。
A.都是先进先出B.都是先进后出
C.只允许在端点处插入和删除元素D.没有共同点
(15)一个递归算法必须包括( )。
A.递归部分B.终止条件和递归部分
C.迭代部分D.终止条件和迭代部分
第4章串、数组和广义表
(1)串是一种特殊的线性表,其特殊性体现在()。
A.可以顺序存储B.数据元素是一个字符
C.可以链式存储D.数据元素可以是多个字符若
(2)串下面关于串的的叙述中,()是不正确的?
A.串是字符的有限序列B.空串是由空格构成的串
C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储
(5)串的长度是指()。
A.串中所含不同字母的个数B.串中所含字符的个数
C.串中所含不同字符的个数D.串中所含非空格字符的个数
(6)假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为10,则LOC[5,5]=()。
A.808B.818C.1010D.1020
(7)设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为()。
A.BA+141B.BA+180C.BA+222D.BA+225
(11)设二维数组A[1..m,1..n](即m行n列)按行存储在数组B[1..m*n]中,则二维数组元素A[i,j]在一维数组B中的下标为()。
A.(i-1)*n+jB.(i-1)*n+j-1C.i*(j-1)D.j*m+i-1
(12)数组A[0..4,-1..-3,5..7]中含有元素的个数()。
A.55B.45C.36D.16
(13)广义表A=(a,b,(c,d),(e,(f,g))),则Head(Tail(Head(Tail(Tail(A)))))的值为()。
A.(g)B.(d)C.cD.d
(14)广义表((a,b,c,d))的表头是(),表尾是()。
A.aB.()C.(a,b,c,d)D.(b,c,d)
(15)设广义表L=((a,b,c)),则L的长度和深度分别为()。
A.1和1B.1和3C.1和2D.2和3
(3)数组A中,每个元素A[i,j]的长度均为32个二进位,行下标从-1到9,列下标从1到11,从首地址S开始连续存放主存储器中,主存储器字长为16位。
求:
存放该数组所需多少单元?
存放数组第4列所有元素至少需多少单元?
数组按行存放时,元素A[7,4]的起始地址是多少?
数组按列存放时,元素A[4,7]的起始地址是多少?
每个元素32个二进制位,主存字长16位,故每个元素占2个字长,行下标可平移至1到11。
(1)242
(2)22(3)s+182(4)s+142
(4)请将香蕉banana用工具H()—Head(),T()—Tail()从L中取出。
L=(apple,(orange,(strawberry,(banana)),peach),pear)
H(H(T(H(T(H(T(L)))))))
第5章树和二叉树
(1)把一棵树转换为二叉树后,这棵二叉树的形态是()。
A.唯一的B.有多种
C.有多种,但根结点都没有左孩子D.有多种,但根结点都没有右孩子
(2)由3个结点可以构造出多少种不同的二叉树?
()
A.2B.3C.4D.5
(3)一棵完全二叉树上有1001个结点,其中叶子结点的个数是()。
A.250B.500C.254D.501
(4)一个具有1025个结点的二叉树的高h为()。
A.11B.10C.11至1025之间D.10至1024之间
(5)深度为h的满m叉树的第k层有()个结点。
(1=<
k=<
h)
A.mk-1B.mk-1C.mh-1D.mh-1
(6)利用二叉链表存储树,则根结点的右指针是()。
A.指向最左孩子B.指向最右孩子C.空D.非空
(7)对二叉树的结点从1开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采用()遍历实现编号。
A.先序B.中序C.后序D.从根开始按层次遍历
(8)若二叉树采用二叉链表存储结构,要交换其所有分支结点左、右子树的位置,利用()遍历方法最合适。
A.前序B.中序C.后序D.按层次
(9)在下列存储形式中,()不是树的存储形式?
A.双亲表示法B.孩子链表表示法C.孩子兄弟表示法D.顺序存储表示法
(10)一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足()。
A.所有的结点均无左孩子B.所有的结点均无右孩子
C.只有一个叶子结点D.是任意一棵二叉树
(11)某二叉树的前序序列和后序序列正好相反,则该二叉树一定是()的二叉树。
A.空或只有一个结点B.任一结点无左子树
C.高度等于其结点数D.任一结点无右子树
(12)若X是二叉中序线索树中一个有左孩子的结点,且X不为根,则X的前驱为()。
A.X的双亲B.X的右子树中最左的结点
C.X的左子树中最右结点D.X的左子树中最右叶结点
(13)引入二叉线索树的目的是()。
A.加快查找结点的前驱或后继的速度B.为了能在二叉树中方便的进行插入与删除
C.为了能方便的找到双亲D.使二叉树的遍历结果唯一
(14)线索二叉树是一种()结构。
A.逻辑B.逻辑和存储C.物理D.线性
(15)设F是一个森林,B是由F变换得的二叉树。
若F中有n个非终端结点,则B中右指针域为空的结点有()个。
A.n-1B.nC.n+1D.n+2
2.应用题
(1)试找出满足下列条件的二叉树
先序序列与后序序列相同
中序序列与后序序列相同
先序序列与中序序列相同
中序序列与层次遍历序列相同
先序遍历二叉树的顺序是“根—左子树—右子树”,中序遍历“左子树—根—右子树”,后序遍历顺序是:
“左子树—右子树―根",根据以上原则,本题解答如下:
(1)
若先序序列与后序序列相同,则或为空树,或为只有根结点的二叉树
(2)
若中序序列与后序序列相同,则或为空树,或为任一结点至多只有左子树的二叉树.
(3)
若先序序列与中序序列相同,则或为空树,或为任一结点至多只有右子树的二叉树.
(4)
若中序序列与层次遍历序列相同,则或为空树,或为任一结点至多只有右子树的二叉树
(2)设一棵二叉树的先序序列:
ABDFCEGH,中序序列:
BFDAGEHC
画出这棵二叉树。
画出这棵二叉树的后序线索树。
将这棵二叉树转换成对应的树(或森林)。
(1)
(2)
(3)假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10。
试为这8个字母设计赫夫曼编码。
试设计另一种由二进制表示的等长编码方案。
对于上述实例,比较两种方案的优缺点。
解:
方案1;
哈夫曼编码
先将概率放大100倍,以方便构造哈夫曼树。
w={7,19,2,6,32,3,21,10},按哈夫曼规则:
【[(2,3),6],(7,10)】,……19,21,32
(100)
(40)(60)
192132(28)
(17)(11)
7106(5)
23
方案比较:
方案1的WPL=2(0.19+0.32+0.21)+4(0.07+0.06+0.10)+5(0.02+0.03)=1.44+0.92+0.25=2.61
方案2的WPL=3(0.19+0.32+0.21+0.07+0.06+0.10+0.02+0.03)=3
结论:
哈夫曼编码优于等长二进制编码
第6章图
(1)在一个图中,所有顶点的度数之和等于图的边数的()倍。
A.1/2B.1C.2D.4
(2)在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的()倍。
A.1/2B.1C.2D.4
(3)具有n个顶点的有向图最多有()条边。
A.nB.n(n-1)C.n(n+1)D.n2
(4)n个顶点的连通图用邻接距阵表示时,该距阵至少有()个非零元素。
A.nB.2(n-1)C.n/2D.n2
(5)G是一个非连通无向图,共有28条边,则该图至少有()个顶点。
A.7B.8C.9D.10
(6)若从无向图的任意一个顶点出发进行一次深度优先搜索可以访问图中所有的顶点,则该图一定是()图。
A.非连通B.连通C.强连通D.有向
(7)下面( )算法适合构造一个稠密图G的最小生成树。
A.Prim算法B.Kruskal算法C.Floyd算法D.Dijkstra算法
(8)用邻接表表示图进行广度优先遍历时,通常借助()来实现算法。
A.栈B.队列C.树D.图
(9)用邻接表表示图进行深度优先遍历时,通常借助()来实现算法。
A.栈B.队列C.树D.图
(10)深度优先遍历类似于二叉树的()。
A.先序遍历B.中序遍历C.后序遍历D.层次遍历
(11)广度优先遍历类似于二叉树的()。
A.先序遍历B.中序遍历C.后序遍历D.层次遍历
(12)图的BFS生成树的树高比DFS生成树的树高()。
A.小B.相等C.小或相等D.大或相等
(13)已知图的邻接矩阵如图6.25所示,则从顶点0出发按深度优先遍历的结果是()。
图6.25邻接矩阵
(14)已知图的邻接表如图6.26所示,则从顶点0出发按广度优先遍历的结果是(),按深度优先遍历的结果是()。
A.0132B.0231
C.0321D.0123
图6.26邻接表
(15)下面()方法可以判断出一个有向图是否有环。
A.深度优先遍历B.拓扑排序C.求最短路径D.求关键路径
(1)已知如图6.27所示的有向图,请给出:
每个顶点的入度和出度;
邻接矩阵;
邻接表;
逆邻接表。
(2)已知如图6.28所示的无向网,请给出:
最小生成树
a
→
b
4
c
3
5
d
e
9
^
h
7
f
6
g
4^
2
(3)已知图的邻接矩阵如6.29所示。
试分别画出自顶点1出发进行遍历所得的深度优先生成树和广度优先生成树。
第7章查找
(1)对n个元素的表做顺序查找时,若查找每个元素的概率相同,则平均查找长度为()。
A.(n-1)/2B.n/2C.(n+1)/2D.n
(2)适用于折半查找的表的存储方式及元素排列要求为()。
A.链接方式存储,元素无序B.链接方式存储,元素有序
C.顺序方式存储,元素无序D.顺序方式存储,元素有序
(3)当在一个有序的顺序表上查找一个数据时,既可用折半查找,也可用顺序查找,但前者比后者的查找速度()。
A.必定快B.不一定
C.在大部分情况下要快D.取决于表递增还是递减
(4)折半查找有序表(4,6,10,12,20,30,50,70,88,100)。
若查找表中元素58,则它将依次与表中()比较大小,查找结果是失败。
A.20,70,30,50B.30,88,70,50
C.20,50D.30,88,50
(5)对22个记录的有序表作折半查找,当查找失