南邮陈慧南版数据结构课后习题答案PPT课件下载推荐.ppt
《南邮陈慧南版数据结构课后习题答案PPT课件下载推荐.ppt》由会员分享,可在线阅读,更多相关《南邮陈慧南版数据结构课后习题答案PPT课件下载推荐.ppt(48页珍藏版)》请在冰豆网上搜索。
elsefail=true;
IsBiTreeIsBiTree(p(p-rcrc);
pre=-max;
fail=false;
IsBiTree(root,pre,failIsBiTree(root,pre,fail);
7.67.6判断二叉树是否二叉排序树。
判断二叉树是否二叉排序树。
7.77.7编编写写一一个个从从二二叉叉搜搜索索树树中中删删除除最最大大元元素素的的算算法法,并并分分析析算算法法的的时间复杂度。
时间复杂度。
templatetemplateboolboolBSTreeBSTree:
Delete(E&
e):
e)BTNodeBTNode*p=root,*q=p;
*p=root,*q=p;
if(!
p)returnif(!
p)returnflseflse;
while(p-while(p-rchildrchild)q=p;
q=p;
p=p-p=p-rchildrchild;
if(p=root)root=root-if(p=root)root=root-lchildlchild;
elseq-elseq-rchildrchild=p-=p-lchildlchild;
e=p-element;
deletep;
returntrue;
37372525919114145656656537372525323214147.87.8以下列序列为输入,从空树开始构造以下列序列为输入,从空树开始构造AVLAVL搜索树。
搜索树。
(1)A1)A,ZZ,BB,YY,CC,XX
(2)A,V,L,T,R,E,I,S,O,K2)A,V,L,T,R,E,I,S,O,K7.97.9一棵高度为一棵高度为hh的的AVLAVL搜索树的最少结点数是多少?
搜索树的最少结点数是多少?
解:
或:
NNhh=N=Nh-1h-1+N+Nh-2h-2+1,N+1,N00=0,N=0,N11=1=1例如例如:
(1)
(1)高度为高度为88的的AVLAVL树至少有多少个结点?
树至少有多少个结点?
NNhh=N=Nh-1h-1+N+Nh-2h-2+1,N+1,N00=0,N=0,N11=1=1至少至少NN88=N=N77+N+N66+1=(N+1=(N66+N+N55+1)+N+1)+N66+1=54+1=54个结点;
个结点;
(2)
(2)有有1212个结点的个结点的AVLAVL树最大高度?
树最大高度?
因因nn55=nn44+n+n33+1=.=12,+1=.=12,故故最大高度最大高度55。
7.1257.125阶阶B_B_树的高度为树的高度为22时,树中元素个数最少为多少?
时,树中元素个数最少为多少?
557.137.13从从空空树树开开始始,以以关关键键字字序序列列a,g,f,b,k,d,h,m,j,e,s,i,a,g,f,b,k,d,h,m,j,e,s,i,r,x,r,x,建立一棵建立一棵44阶阶B_B_树。
树。
7.147.14从上题的从上题的B_B_树中删除树中删除a,e,f,ha,e,f,h。
11删除删除aa22删除删除eebbffddhkrhkrmmggsxsxijijeebbffddhkrhkrmmggsxsxijij33删除删除ffbdbdhhffkrkrmmggsxsxijijbbhhddkrkrmmggsxsxijij44删除删除hhbbiiddkrkrmmggsxsxjj习题八(第习题八(第154154页)页)8.38.3设设有有散散列列表表ht11ht11,散散列列函函数数为为h(key)=keyh(key)=key%1111,采采用用线线性性探探测测和和二二次次探探测测法法处处理理冲冲突突,试试用用关关键键字字序序列列7070,2525,8080,3535,6060,4545,5050,5555分别建立散列表。
分别建立散列表。
012345678910012345678910252550505555htht70708080353560604545线性探测散列表线性探测散列表012345678910012345678910252550505555htht707080803535606045458.48.4二次探测散列表:
二次探测散列表:
hh11(key)=key%11(key)=key%11,hh22(key)=key%9+1(key)=key%9+18.78.7有有10001000个个元元素素,其其关关键键字字值值为为09990999。
把把这这些些数数据据存存入入长长度度为为200200的拉练式的散列表中。
试设计较好的散列函数,并说明理由。
的拉练式的散列表中。
采用除留余数法,并取素数解:
采用除留余数法,并取素数199199为模,即散列函数为:
为模,即散列函数为:
h(key)=key%199h(key)=key%199该散列函数的优点是:
该散列函数的优点是:
11简单,计算速度快;
简单,计算速度快;
22分分布布均均匀匀。
10001000个个元元素素按按关关键键字字的的值值,均均匀匀地地分分布布在在散散列列表表中中散散列列地地址址为为01980198的的单单链链表表中中。
除除散散列列地地址址为为0404的的单单链链表表长长度度为为66,其余的单链表的长度均为其余的单链表的长度均为55。
3333散列表的散列表的装载密度装载密度n/M=1000/199n/M=1000/19955。
44成功搜索的平均搜索长度为:
成功搜索的平均搜索长度为:
1+1+/24/2455不成功搜索的平均搜索长度为:
不成功搜索的平均搜索长度为:
556644只只有有散散列列地地址址为为199199的的单单链链表表为为空空,即即散散列列表表中中只只浪浪费费11个个单单元元。
故故空间利用率较高。
空间利用率较高。
习题九(第习题九(第188188页)页)9.19.1对图对图9-239-23所示的有向图,求:
所示的有向图,求:
11每个顶点的入度和出度;
每个顶点的入度和出度;
22强连通分量;
强连通分量;
3333邻接矩阵。
邻接矩阵。
332244115500图图9-239-23解解:
11各各个个顶顶点点的的入入度度和出度如下:
和出度如下:
顶点顶点入度入度出度出度0033001122222211223311114422335511222244115522强连通分量为强连通分量为33邻接矩阵如下:
邻接矩阵如下:
00000000000010100000000001010000101010100000000011110101000000001010101033009.29.2当当以以边边,的的次次序序,从从只只有有66个个顶顶点点没没有有边边的的图图开开始始,通通过依次输入这些边,建立邻接表结构。
画出邻接表。
过依次输入这些边,建立邻接表结构。
552244113300图图9-259-25解:
图如解:
图如9-259-25所示,所示,邻接表如下:
邻接表如下:
005500112233445500334444002211110011223344559.49.4已知有向图的邻接表,写出计算各个顶点的入度的算法。
已知有向图的邻接表,写出计算各个顶点的入度的算法。
解解:
在在需需要要使使用用各各个个顶顶点点的的入入度度的的程程序序中中说说明明整整型型数数组组indind,并并用用以以下函数计算各个顶点的入度。
下函数计算各个顶点的入度。
templatetemplatevoidvoidLinkedGraphLinkedGraph:
InDg(ENodeInDg(ENode*a,inta,intn,intn,intindind)ENodeENode*p;
*p;
for(for(intinti=0;
in;
i+)i=0;
i+)indiindi=0;
=0;
for(i=0;
i+)for(i=0;
ifor(p=ai;
p;
p=p-nextarcnextarc)indpindp-adjvexadjvex+;
+;
9.59.5在在类类LinkedGraphLinkedGraph增增加加一一个个成成员员函函数数,实实现现从从一一个个用用二二维维数数组组表示的邻接矩阵,建立图的邻接表。
表示的邻接矩阵,建立图的邻接表。
create(MGraphcreate(MGraphb,intb,intn)n)intinti,j;
i,j;
i+)for(j=0;
jn;
j+)for(j=0;
j+)if(b.aij)Add(i,j,b.aij);
if(b.aij)Add(i,j,b.aij);
在在类类LinkedGraphLinkedGraph增增加加一一个个成成员员函函数数creatcreat,并并在在类类MgraphMgraph将将该该函函数数说说明明为为友友元元函函数数,以以便便访访问问MgraphMgraph类类中中对对象象的的私私有有数数据据,可可以以直直接调用类接调用类LinkedGraphLinkedGraph中的成员函数中的成员函数AddAdd。
9.79.7设计算法,完成在邻接表上实设计算法,完成在邻接表上实现图的现图的DFSDFS和和BFSBFS生成森林生成森林(生成树生成树)。
DFS():
DFS()boolboolvisited=newvisited=newboolbooln;
n;
intintk1,k2;
k1,k2;
ed0=0;
k1=k2=0;
i+)visitedivisitedi=false;
=false;
i+)if(!
visitedi)if(!
visitedi)m=k2;
m=k2;
DF