数据结构复习题.docx
《数据结构复习题.docx》由会员分享,可在线阅读,更多相关《数据结构复习题.docx(22页珍藏版)》请在冰点文库上搜索。
数据结构复习题
第一章
一、填空题
1数据元素是数据的基本单位,.数据项是具有独立含义的最小标识单位。
3数据之间的关系(逻辑结构)有四种集合、线性结构、树形结构、图状结构。
4数据的存储结构包括顺序存储结构、链式存储结构
二、问答题
1.什么是数据结构?
什么是数据类型?
数据结构是相互之间存在一种或多种特定关系的数据元素的集合
数据类型是一个值的集合和定义在这个值集上的一组操作的总成。
2.叙述算法的定义与特性。
算法是对特定问题求解步骤的一种描述。
特性:
有穷性,确定性,可行性,输入(零个或多个输入),输出(有一个或多个输出)
3. 叙述算法的时间复杂度。
三、判断题(在各题后填写“√”或“×”)
1. 线性结构只能用顺序结构来存放,非线性结构只能用非顺序结构来存放。
(X)
2.下列几种数量级从小到大的排列顺序为:
O
(1)、O(logn)、O(n)、O(nlogn)、O(n2)、O(n3)、O(2n)。
(√)
四、设n为正整数,利用大O记号,将该程序段的执行时间表示为n的函数,则下列程序段的时间复杂度可表示为
(1)(....)
(2)(....)
1)floatsum1(intn){
/*计算1!
+2!
+…+n!
*/
p=1;sum1=0;
for(i=1;i<=n;++i){
p=p*i;sum1=sum1+p
}
}/*sum1*/
O(n)
(2)floatsum2(intn){
/*计算1!
+2!
+…+n!
*/
sum2=0;
for(i=1;i<=n;++i){
p=1;
for(j=1;j<=i;++j)p=p*j;
sum2=sum2+p;
}
}/*sum2*/
O(n2)
第二章
一、判断
1.线性表在顺序存储时,逻辑上相邻的元素未必在存储的物理位置次序上相邻。
(X)
2.顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。
(X)
二、填空
1.在单链表中,指针p所指结点为最后一个结点的条件是p->next==NULL。
2.在单链的循环链表中,指针p所指结点为最后一个结点的条件是p->next==head。
三、选择
1.、在一个长度为n的顺序表的表尾插入一个新元素的渐进时间复杂度为(B)
A.O(n)B.O
(1)C.O(n2)D.O(log2n)
2.线性链表不具有的特点是(A)。
A.随机访问B.不必事先估计所需存储空间大小
C.插入与删除时不必移动元素D.所需空间与线性表长度成正比
3.线性表采用链式存储时,其地址(D)。
A必须是连续的B一定是不连续的
C部分地址必须是连续的D连续与否均可以.
4、下列哪一个程序片段是在链表中间插入一个结点。
(假设新结点为NEW,欲插入在Pointer结点之后)
ANEW->next=PointerBNEW->next=Pointer->next
Pointer=NEWPointer->next=NEW
CPointer->next=NEW->nextD以上皆非
NEW->next=Pointer
5.在单链表中,增加头结点的目的是()A.使单链表至少有一结点B.标志表中首结点位置
C.方便运算的实现D.说明单链表是线性表的链式存储实现
6.线性表L在情况下适用于使用链式结构实现。
()
(A)需经常修改L中的结点值(B)需不断对L进行删除插入
(C)L中含有大量的结点(D)L中结点结构复杂
7、向一个有127个元素原顺序表中插入一个新元素并保存原来顺序不变,平均要移动()个元素。
A、8B、63.5C、63D、7
三、算法设计
1设顺序表L中的数据元素递增有序。
试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。
2分别写出算法将单链表和顺序表就地逆置(用尽可能少的附加空间在原存储出空间内将将线性表a1,a2,a3,…an逆置为an…a3,a2,a1)。
*3删除元素递增排列的链表L中所有值相同的元素。
第三章答案
3.1铁道进行车厢调度,回答:
(1)如进站的车厢序列为123,则可能得到的出站车厢序列是什么?
(2)如进站的车厢序列为123456,能否得到435612和135426的出站序列,并说明原因(即写出以“S”表示进栈、“X”表示出栈的栈序列操作)。
【解答】
(1)可能得到的出站车厢序列是:
123、132、213、231、321。
(2)不能得到435612的出站序列。
因为有S
(1)S
(2)S(3)S(4)X(4)X(3)S(5)X(5)S(6)S(6),此时按照“后进先出”的原则,出栈的顺序必须为X
(2)X
(1)。
能得到135426的出站序列。
因为有S
(1)X
(1)S
(2)S(3)X(3)S(4)S(5)X(5)X(4)X
(2)X
(1)。
3.3给出栈的两种存储结构形式名称,在这两种栈的存储结构中如何判别栈空与栈满?
【解答】
(1)顺序栈
判断栈S空:
如果S->top==S->base表示栈空。
判断栈S满:
如果S->top-S->base==Stack_Size表示栈满。
(2)链栈(top为栈顶指针,指向当前栈顶元素前面的头结点)
判断栈空:
如果top->next==NULL表示栈空。
判断栈满:
当系统没有可用空间时,申请不到空间存放要进栈的元素,此时栈满。
3.4照四则运算加、减、乘、除和幂运算的优先惯例,画出对下列表达式求值时操作数栈和运算符栈的变化过程:
A-B*C/D+E↑F
【解答】
3.8要求循环队列不损失一个空间全部都能得到利用,设置一个标志tag,以tag为0或1来区分头尾指针相同时的队列状态的空与满,请编写与此相应的入队与出队算法。
【解答】入队算法:
intEnterQueue(SeqQueue*Q,QueueElementTypex)
{/*将元素x入队*/
if(Q->front==Q->rear&&Q->tag==1)/*队满*/
return(FALSE);
if(Q->front==Q->rear&&Q->tag==0)/*x入队前队空,x入队后重新设置标志*/
Q->tag=1;
Q->elem[Q->rear]=x;
Q->rear=(Q->rear+1)%MAXSIZE;/*设置队尾指针*/
Return(TRUE);
}
出队算法:
intDeleteQueue(SeqQueue*Q,QueueElementType*x)
{/*删除队头元素,用x返回其值*/
if(Q->front==Q->rear&&Q->tag==0)/*队空*/
return(FALSE);
*x=Q->element[Q->front];
Q->front=(Q->front+1)%MAXSIZE;/*重新设置队头指针*/
if(Q->front==Q->rear)Q->tag=0;/*队头元素出队后队列为空,重新设置标志域*/
Return(TUUE);
}
编写求解Hanoi问题的算法,并给出三个盘子搬动时的递归调用过程。
【解答】算法:
voidhanoi(intn,charx,chary,charz)
{/*将塔座X上按直径由小到大且至上而下编号为1到n的n个圆盘按规则搬到塔座Z上,Y可用做辅助塔座*/
if(n==1)
move(x,1,z);
else
{Hanoi(n-1,x,z,y);
move(x,n,z);
Hanoi(n-1,y,x,z);
}
}
Hanoi(3,A,B,C)的递归调用过程:
Hanoi(2,A,C,B):
Hanoi(1,A,B,C)move(A->C)1号搬到C
Move(A->B)2号搬到B
Hanoi(1,C,A,B)move(C->B)1号搬到B
Move(A->C)3号搬到C
Hanoi(2,B,A,C)
Hanoi(1,B,C,A)move(B->A)1号搬到A
Move(B->C)2号搬到C
Hanoi(1,A,B,C)move(A->C)1号搬到C
1.简述空串与空格串、主串与子串每对术语的区别?
2.两个字符串相等的充要条件是什么?
3.串有哪几种存储结构?
4.已知两个串:
s1=”fgcdbcabcadr”,s2=”abc”,试求两个串的长度,判断串s2是否是串s1的子串,并指出串s2在串s1中的位置。
5.已知:
s1=〃I’mastudent〃,s2=〃student〃,s3=〃teacher〃,试求下列各运算的结果:
Index(s1,s2,1);SubString(sub,s,7,7);
Strlength(s1);
Concat(s2,s3);
StrDelete(s1,4,10);
6.如下陈述中正确的是()。
A.串是一种特殊的线性表B.串的长度必须大于零
C.串中元素只能是字母D.空串就是空白串
7.模式串t=‘abcaabbcabcaabdab’,该模式串的next数组的值为()。
A.01112211123456712
B.01112121123456112
C.01112231123456712
D.01110013101100701
*7.编写算法,统计串S中字符的种类和个数(定长顺序存储).
提示:
用结构数组T存储统计结果
typedefstruct{
charch;
intnum;
}mytype;
mytypeT[MAXSIZE];
一、选择题
5-1设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每个元素占一个空间,问A[3][3](10)存放在什么位置()脚注(10)表示用10进制表示。
A)676B)650C)600D)692
【解析】
设数组元素A[i][j]存放在起始地址为Loc(i,j)的存储单元中。
∵Loc(2,2)=Loc(0,0)+2*n+2=644+2*n+2=676.
∴n=(676-2-644)/2=15
∴Loc(3,3)=Loc(0,0)+3*15+3=644+45+3=692.
5-2如下是一个稀疏矩阵的三元组法存储表示和基于此表示所得出的相关叙述
I.该稀疏矩阵有5行II.该稀疏矩阵有4列
III.该稀疏矩阵有6个非0元素
这些叙述中______是正确的。
A)仅IB)I和IIC)仅IIID)全部
【解析】本题考点是稀疏矩阵的三元组法存储。
对稀疏矩阵的每一个非零元素,用一个三元组来描述。
用线性表中的一个结点来对应稀疏矩阵的一个非零元素,每个结点包括三个域(行下标,列下标,值),结点之间的次序按矩阵的行优先顺列。
采用线性表的顺序存储结构来存储这些三元组,构成三元组表。
本题中,从该稀疏矩阵的三元组法存储表示中,只能判断该矩阵有6个非0元素,不能判断稀疏矩阵总的行数和列数。
5-3设有下三角矩阵A[0..10,0..10],按行优先顺序存放其非零元素,每个非零元素占两个字节,存放的基地址为100,则元素A[5,5]的存放地址为()。
A)110B)120C)130D)140
【解析】本题的考点是多维数组的顺序存储。
按行优先顺序存储下三角矩阵Ann的非零元素,可以得到如下的序列:
a00,a10,a11,a20,a21,a22,…..,an0,an1,an3,….,ann,将该序列顺序存储在内存中,第0行到第i-1行的元素个数为1+2+…+(i)=i′(i+1)/2,假设a11地址是Loc(a11),每个元素的长度为k,非零aij(1≤j≤i≤n)的是第i行的第j个元素,因此其地址是:
Loc(aij)=Loc(a00)+(i′(i+1)/2+j)×k。
因此A[5,5]的存放地址=100+(5×6/2+5)×2=140。
5-4按行优先顺序存储下三角矩阵的非零元素,则计算非零元素aij(1≤j≤i≤n)的地址的公式为______。
A)LOC(aij)=LOC(a11)+i×(i+1)/2+j
B)LOC(aij)=LOC(a11)+i×(i+1)/2+(j-1)
C)LOC(aij)=LOC(a11)+i×(i-1)/2+j
D)LOC(aij)=LOC(a11)+i×(i-1)/2+(j-1)
【解析】本题的考点是多维数组的顺序存储。
按行优先顺序存储下三角矩阵Ann的非零元素,可以得到如下的序列:
a11,a21,a22,a31,a32,a33,…..,an1,an2,an3,….,ann,将该序列顺序存储在内存中,第1行到第i-1行的元素个数为1+2+…+(i-1)=i′(i-1)/2,假设a11地址是Loc(a11),非零aij(1≤j≤i≤n)的是第i行的第j个元素,因此其地址是:
Loc(aij)=Loc(a11)+i′(i-1)/2+j-1。
5-5二维数组A[0..8,0..9],其每个元素占2字节,从首地址400开始,按行优先顺序存放,则元素A[8,5]的存储地址为。
A)570B)506C)410D)482
【解析】本题的考点是二维数组的存储。
二维数组采用顺序存储结构,按行优先顺序,且下标从0开始,求数据元素的地址用下述公式:
loc(aij)=loc(a11)+(i*n+j)*l,其中,n和m分别为数组的每行和每列的元素个数,l为每个数组元素所占用的存储空间单元个数。
因此A[8,5]的地址是400+(8×10+5)×2=570。
二、简答题
5-1设二维数组A5*6的每个元素占4个字节,已知Loc(a00)=1000,A共占多少个字节?
A的终端结点a45的起始地址为多少?
按行和按列优先存储时,a25的起始地址分别为多少?
【解析】A共占的字节数为:
5*6*4=120
a45的起始地址为:
Loc(a00)+(4*6+5)*4=1000+116=1116
按行优先存储时,a25的起始地址为:
Loc(a00)+(2*6+5)*4=1000+68=1068
按列优先存储时,a25的起始地址为:
Loc(a00)+(5*5+2)*4=1000+108=1108
5-2利用广义表的head和tail操作写出函数表达式,把以下各题中的单元素banana从广义表中分离出来:
(1)L1(apple,pear,banana,orange)
(2)L2((apple,pear),(banana,orange))
(3)L3(((apple),(pear),(banana),(orange)))
(4)L4((((apple))),((pear)),(banana),orange)
(5)L5((((apple),pear),banana),orange)
(6)L6(apple,(pear,(banana),orange))
【解析】
(1)Head(Tail(Tail(L1)))
(2)Head(Head(Tail(L2)))
(3)Head(Head(Tail(Tail(Head(L3)))))
(4)Head(Head(Tail(Tail(L4))))
(5)Head(Tail(Head(L5)))
(6)Head(Head(Tail(Head(Tail(L6)))))
5-3画出下列广义表的图形表示和它们的存储表示:
(1)D(A(c),B(e),C(a,L(b,c,d)))
(2)J1(J2(J1,a,J3(J1)),J3(J1))
【解析】
(1)D(A(c),B(e),C(a,L(b,c,d)))
(2)J1(J2(J1,a,J3(J1)),J3(J1))
三、应用题
5-1如果矩阵A中存在这样的一个元素A[i][j]满足条件:
A[i][j]是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。
编写一个程序计算出m*n的矩阵A的所有马鞍点。
【解析】
voidGet_Saddle(intA[m][n])//求矩阵A中的马鞍点
{for(i=0;i{for(min=A[i][0],j=0;jif(A[i][j]for(j=0;jif(A[i][j]==min)//判断这个(些)最小值是否鞍点{
for(flag=1,k=0;kif(minif(flag)
printf("Foundasaddleelement!
\nA[%d][%d]=%d",i,j,A[i][j]);}}//for}//Get_Saddle
一、选择题
1.若不考虑结点的数据信息的组合情况,具有3个结点的树共有种()形态,而二叉树共有()种形态。
A.2B.3
C.4D.5
2.对任何一棵二叉树,若n0,n1,n2分别是度为0,1,2的结点的个数,则n0=()
A.n1+1B.n1+n2
C.n2+1D.2n1+1
3.已知某非空二叉树采用顺序存储结构,树中结点的数据信息依次存放在一个一维数组中,即
ABC□DFE□□G□□H□□,该二叉树的中序遍历序列为()
A.G,D,B,A,F,H,C,EB.G,B,D,A,F,H,C,E
C.B,D,G,A,F,H,C,ED.B,G,D,A,F,H,C,E
4、具有65个结点的完全二叉树的高度为( )。
(根的层次号为1)
A.8B.7C.6D.5
5、在有N个叶子结点的哈夫曼树中,其结点总数为()。
A不确定B2NC2N+1D2N-1
6、以二叉链表作为二叉树存储结构,在有N个结点的二叉链表中,值为非空的链域的个数为()。
AN-1B2N-1CN+1D2N+1
三、填空题。
1、对于一个具有N个结点的二叉树,当它为一颗_____二叉树时,具有最小高度。
2、对于一颗具有N个结点的二叉树,当进行链接存储时,其二叉链表中的指针域的总数为_____个,其中_____个用于链接孩子结点,_____个空闲着。
3、一颗深度为K的满二叉树的结点总数为_____,一颗深度为K的完全二叉树的结点总数的最小值为_____,最大值为_____。
4、已知一棵二叉树的前序序列为ABDFCE,中序序列为DFBACE,后序序列为
四、应用题。
1、9.假设用于通讯的电文仅由8个字母组成,字母在电文中出现的频率分别为:
0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10
请为这8个字母设计哈夫曼编码。
2、已知一棵树二叉如下,请分别写出按前序、中序、后序遍历时得到的结点序列,并将该二叉树还原成森林。
第7章习题选解
一、选择题
7-1关键路径是指AOE(Activity On Edge)网中________。
A. 最长的回路 B. 最短的回路 C. 从源点到汇点(结束顶点)的最长路径D. 从源点到汇点(结束顶点)的最短路径
7-2已知AOE网中顶点v1~v7分别表示7个事件,弧al~a10分别表示10个活动,弧上的数值表示每个活动花费的时间,如下图所示。
那么,该网的关键路径的长度为__
(1)__,活动a6的活动的(最迟开始时间-活动的最早开始时间)为__
(2)__。
(1) A. 7B. 9C. 10D. 11
(2) A. 3B. 2C. 1D. 0
7-3任何一个无向连通图的最小生成树 。
A、只有一棵 B、有一棵或多棵
C、一定有多棵 D、可能不存在
7-4下面关于图的存储的叙述中正确的是____
A)邻接矩阵占用的存储空间只与图中结点个数有关,而与边数无关;
B)邻接矩阵占用的存储空间只与图中边数有关,而与结点个数无关;
C)邻接表占用的存储空间只与图中结点个数有关,而与边数无关;
D)邻接表占用的存储空间只与图中边数有关,而与结点个数无关。
7-5、在一个无向图中,所有顶点的度数之和等于所有边数的____倍。
A.3B.2C.1D.1/2
二、简答题
7-1给出如下图所示的无向图G的邻接矩阵和邻接表两种存储结构。
7-2使用普里姆算法和克鲁斯卡尔算法构造出如图3所示的图G的最小生成树。
7-3有n个顶点的无向连通图至少有多少条边?
有n个顶点的有向强连通图至少有多少条边?
试举例说明。
三算法题
*7.5 编写算法,由依次输入的顶点数目、弧的数目、各顶点的信息和各条弧的信息建立有向图的邻接表。
第九章查找表
1.设有100个数据元素,采用折半搜索时,最大比较次数为_7______。
2、在含有n个元素的顺序表中,用顺序查找方法,查找成功的平均查找长度为_(n+1)/2_。
3、对