数据结构课后题Word文档格式.docx
《数据结构课后题Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课后题Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
(2)floatsum2(intn){
sum2=0;
for(j=1;
j<
=i;
++j)p=p*j;
sum2=sum2+p;
}/*sum2*/
第二章
一、判断
1.线性表在顺序存储时,逻辑上相邻的元素未必在存储的物理位置次序上相邻。
2.顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。
二、填空
1.在单链表中,指针p所指结点为最后一个结点的条件是。
2.在单链的循环链表中,指针p所指结点为最后一个结点的条件是。
三、选择
1.、在一个长度为n的顺序表的表尾插入一个新元素的渐进时间复杂度为()
A.O(n)B.O
(1)C.O(n2)D.O(log2n)
2.线性链表不具有的特点是()。
A.随机访问B.不必事先估计所需存储空间大小
C.插入与删除时不必移动元素D.所需空间与线性表长度成正比
3.线性表采用链式存储时,其地址()。
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(b)所示铁道(两侧铁道均为单向行驶道)进行车厢调度,回答:
⑴如进站的车厢序列为123,则可能得到的出站车厢序列是什么?
⑵如进站的车厢序列为123456,能否得到435612和135426的出站序列,并说明原因。
(即写出以“S”表示进栈、以“X”表示出栈的栈操作序列)。
2.
设队列中有A、B、C、D、E这5个元素,其中队首元素为A。
如果对这个队列重复执行下列4步操作:
(1)
输出队首元素;
(2)
把队首元素值插入到队尾;
(3)
删除队首元素;
(4)
再次删除队首元素。
直到队列成为空队列为止,得到输出序列:
A、C、E、C、C
(2)A、C、E
A、C、E、C、C、C
(4)A、C、E、C
给出栈的两种存储结构形式名称,在这两种栈的存储结构中如何判别栈空与栈满?
4.
按照四则运算加、减、乘、除和幂运算(↑)优先关系的惯例,画出对下列算术表达式求值时操作数栈和运算符栈的变化过程:
A-B*C/D+E↑F
5.
要求循环队列不损失一个空间全部都能得到利用,设置一个标志域tag,以tag为0或1来区分头尾指针相同时的队列状态的空与满,请编写与此结构相应的入队与出队算法。
6.
简述以下算法的功能(其中栈和队列的元素类型均为int):
(1)voidproc_1(StackS)
{inti,n,A[255];
n=0;
while(!
EmptyStack(S))
{n++;
Pop(&
S,
&
A[n]);
}
for(i=1;
i++)
Push(&
A[i]);
(2)voidproc_2(StackS,
inte)
{StackT;
intd;
InitStack(&
T);
{Pop(&
d);
if(d!
=e)Push(&
T,
d);
EmptyStack(T))
Push(&
(3)voidproc_3(Queue
*Q)
{StackS;
S);
EmptyQueue(*Q))
{
DeleteQueue(Q,
Push(&
EnterQueue(Q,d)
第四章
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)
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<
m;
i++)
for(min=A[i][0],j=0;
j<
n;
j++)
if(A[i][j]<
min)min=A[i][j];
//求一行中的最小值
for(j=0;
if(A[i][j]==min)//判断这个(些)最小值是否鞍点
for(flag=1,k=0;
k<
k++)
if(min<
A[k][j])flag=0;
if(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)__。
7B.
9C.
10D.
11
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个数据元素,采用折半搜索时,最大比较次数为_______。
2、在含有n个元素的顺序表中,用顺序查找方法,查找成功的平均查找长度为__。
3、对有14个数据元素的有序表R[0…13]进行折半搜索,搜索到R[3]的关键码等于给定值,此时元素比较顺序依次为()。
A.R[0],R[1],R[2],R[3]B.R[0],R[13],R[2],R[3]
C.R[6],R[2],R[4],R[3]D.R[6],R[4],R[2],R[3]
4、通常查找线性表数据元素的方法有二分法查找和顺序查找两种方法,其中是一种只适合于顺序存储结构的方法;
而是一种对顺序和链式存储结构均适用的方法。
5、散列法存储的基本思想是根据来决定,冲突指的是关键字对应到相同的存储地址,处理冲突的主要方法有。
6、画出对长度为10的有序表进行折半查找的判定树,并求其等概率时查找成功的平均查找长度。
三次比较成功的结点有哪些?
8选取哈希函数H(k)=k%11,用线性探测再散列法(及链地址法)处理冲突。
试在0~10的散列地址空间中,对关键字序列(22,41,53,46,30,13,01,67)构造哈希表,并求等概率情况下查找成功的平均查找长度。
第十章排序
1.一个记录的关键字为(46,79,56,38,42,88),采用快速排序以第一个记录为基准得到的第一次划分结果为[]
A.(38,42,46,56,79,88)B.(42,38,46,79,56,88)
C.(42,38,46,56,79,88)D.(38,42,46,79,56,88)
2.