《数据结构与实训(第4版)》习题参考答案.docx

上传人:李司机 文档编号:7205222 上传时间:2024-06-29 格式:DOCX 页数:17 大小:95.67KB
返回 下载 相关 举报
《数据结构与实训(第4版)》习题参考答案.docx_第1页
第1页 / 共17页
《数据结构与实训(第4版)》习题参考答案.docx_第2页
第2页 / 共17页
《数据结构与实训(第4版)》习题参考答案.docx_第3页
第3页 / 共17页
《数据结构与实训(第4版)》习题参考答案.docx_第4页
第4页 / 共17页
《数据结构与实训(第4版)》习题参考答案.docx_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《《数据结构与实训(第4版)》习题参考答案.docx》由会员分享,可在线阅读,更多相关《《数据结构与实训(第4版)》习题参考答案.docx(17页珍藏版)》请在三一办公上搜索。

1、第一东I.填空题(I)在计算机中的存储映像(是逻辑结构在计徵机中的实现或存储衣示数据元素的去示元素之间关系的表示数据元素.(2)一对一一对多多对多(3)时、空效率指人对匏法问读埋解的难易程度对于非法的输入数据,算法能给出相应的响应,而不是产生不可预料的后果。(4)软硬件环境问时规模的(5)最坏(6)O(n*)O(n2)(7)时间复杂度(8)n2On-)(9)指针2.判断越(1) 2)(4)(6)(7)(8)(9)(8)p的前骗O(n)(9)PfneXt=pnext-next(IO)head-Iiext=NuIIhead=Nllhead-next=headhead=Nll(IDhead-ncxl

2、=head-next-nexthead=head-next2 .判断题(1) (2)(4)(5)(8)(9)10)3 .选择SS(1) A(2)A3)A(4)D4 .简答胆(I)单向循环链表双向循环链表存储密度脑低代找后继的时间以杂度O(I)O(I)否找前胆的时间狂杂度0(n)O(I)(2)在带头结点的单於表匕查找指针P所指结点的前驱.(3)交换指针P与指竹q所指结点的值.5 .算法设计JS(1)voidrcvcrsc(Scq1.istI)for(i=0;i=l.lis(leng(h-1)/2;i+)l.elemil.eleml.listleng(h-l-i:(2)voiddeleteSeq1

3、.istI.ini.intk),从顺序表中捌除自第i个元素开始的k个元素力if(il.listlength-lkIIWintf(Error”);return:)if(i+k=l.listlcngth)小衣中从i个元素起到最后一个元素有k个元素/(for(j=ikJO.Iisdength;j+)l.elemj-k=l.elemj;1.IistIengt=I.Iisllength-k:)else*表中从i个元素起Il到最后一个元素不足k个元素*/IJiSUenglh=i:(3)voidinsert(1.ink1.iSih.EIememTyPex)产将x插入到递增链表h中,插入后的链表有序性不变if

4、(h-ncxt=Null)C空表时/q=(linklis)InaUoC(Sizeoft1.istNode):q-IWXt=NuIkq-data=x:h-*ncxt=q;)pl=h-next:p2=h:while(plnext!=Null&pldatax)(p2=p;pI=pI-*next;if(p-*ncxt=Null&p-*(hta=x(pl-nexl!=Null&pl-*dala=x)4/(q=(1.ink1.ist)malloc(sizcof(1.istNodckq-*data=x;p2-*nex(=q;q-nexl=pl;I(4)voiddelete(1.ink1.islp)片在不带头

5、结点且长度大于1的单向循环链表中,P指向某结点删除P的前郭结点,PPP=PinCKI;while(p)p-*nexex(!=)ppp=PPPrrwxl:尸刷除P的前弱结点”/PP=PPPinCXt;PPPfneXl=PPfnext;frx:I(5)voiddelete(1.ink1.islh)/*h为带头结点的,非降序排列的单鞋表的头指针.删除表中值相同的结点.使之只保留一个p=h-*nexn(1.ink1.islla.1.ink1.istlb/la.lb.lc分别为表示集合A,BC的带头结点的递增有序的单健表的头指针C=AGBillIct表返回州(Ic=(1.ink1.isl)malloc(

6、Sizeof(1.inkNode);Ic-ncxt=null:tail=lc;4tail指向IC健的尾结点if(!(la-*ncxc)Itlum(Ic);elsepa=la-next:if(!(lb-*next)rc(um(lc);while(pa)Ipb=lb-next;while(pb&pa-data!=pb-datapb=pb-ncxt;ifinseft(lc,(ail.pa-*data);Pa=ParnCxl:rcturn(lc);IvoidinsertM值X插入到单链表1的尾部*/P=(1.ink1.ist)malloc(Sizcof(1.inkNodc)-*daa=x;PfrWXl

7、=null:tail-*ncxt=p:tail=p;IScq1.istintcrsxtio11(Scq1.istla.Scq1.istlb)集合A,B,C对应的顺序递增表为EItMc,C=AB由Ic表示,/IcJistlength=O;if(IaJistIcngth=OIbJislknglh=O)rclum(lc)for(a=0:ala.iistlength;a+)for(b=0;txlb.listleng(h&lb.elcmb!=la.clcma;b)if(IxIbJistlength)(lc.elemlc.lisilength)sla.elema:Ic-Iistlcngth+;I)relu

8、cn(lc):(11)intDel1.st(Seq1.st,1.intx.inty)i11ti=O,k=O:while(ilistlngth)if(1.-elemi=x&1.-emielemik=1.-lmi;i+;)1.-XistIength=1.,IiStIength-k;return(OK);(12)intDelUsUSeqUst,1.)(intI=O1j=1;while(jelemi=1.-elemj)j+;elsei+;1.-elemi=1.-elemj;j+;)1.-listength-i*1;return(OK);第三章堆栈和队列I.填空题(1) 1.3.51(2) push,p

9、op,push.push.pop.push.pop.pop(3)栈空(4)Of!)栈满O(I)(5)=s.top-1=s.top+1(6)S(7)空(8)栈底栈顶(9)队尾队首(头)(10)是否为空是否为满(II)21(!2fix)nt-nexl=rcar(I3front=rcar2.判断SS(rcar+l)%MAX=frontrear+MAX-frort(I)(2)(4(5)X(8(9):elseIWhiH!Empty(sl)Push(s2.Pop(sl);PoPG2);)I(7)WdciincMAXSIZE50typcdcfstructQucucEIcnKntTypcclcmMAXSIZE

10、;i11(fronauag;a将标志u设蔚为队列的一个成员,便于数据的传递Uig=O衣示队列为空,Iag=I表示队列不空*/ICirQucuc:voidlnitQucuc(CirQucuc*q)q-fro11(=q-rea-0;q-tag=O:IintA(klQucuc(CirQucuc*q,EIcmcmTypcc)产入队SVif(q-tag=l&q-rcar=q-fnnl(printf(*noverflow)returnERROR;Jif(qUg=0&q-rear=q-frnlq-tag=l:f有元素入队则队列一定不空将Ulg置1/q-clcmq-rcar=c;qrear=(q-tea,I)

11、%MAXSIZE:relurn0K:IintDelctcQueuc(CirQucuc*q,QucucEIcmcntTypc*c)产出队衾/if(q-(ag=0&q-rear=q!ronl)returnERROR:4c=q-clcmq-frontl;q-fron(q-fmm+1)%MaxSizc;if(qrear=qfn11)q-ag=O;产有元索出队后,队头和队尾相等,队列为空,则将I胆置0*/returnOK:第四章a1,0.().0a1.0.0.1a1.0.0.2a1.0.1.0a1.0.1.1a1.0.1.2aIJAOaI,I.0,a1,1.0.2a1.1.1.0a1.1,1.1a1.1

12、,1,2a1.2.0,0列优先:a12.0.1a1.2,0.2aI.2.I,0al,2,l.la1.2,1.2a0,0.0.0a1.0.0.0a0.1.0.0a1.1.0.0a0.2.0.0a1.2.0.0aOA1.Oa1.0.1.0a0.1,1,0a1,1,1,0a0.2,1.0a1.2,1,0a0.0.0Ja1.0.0.1a0.1.0.a1.1.0.1a0.2,0.1a1.2.0.1a0.0.1.1u1.0.1.1a0.1,1.1a1.1.1.1a0.2.1.1a1.2.1.1a0.0.0.2a1.0.0.2a0.1.0.2a1.1.0.2a0.2.0.2a1.2.0.2a0,0J,2a1

13、.0,1.2a0.1.1.2a1.1.1.2a0.2.I.2a1.2,1,2(7)稀疏矩阵压缩存储后会失去随机存取的功能,因为稀疏矩阵不能根据元素在矩阵中的位理求得在其在三元组顺序表中的位置,而特殊矩阵则可以,11*mtwhile(j!=NtxlcNum-I)(p-dataj=#;j+:I(2)voidfrcqency(intnum)intlistlength;Scq1.ist;voidGelSaddle(intA(.iniin.intn.ScqI1.isls(),求矩阵Ai,中的载点.鞍点的位置存放在顺序表S中,/SJistIength=O;for(i=0:im;i+)Ifor(min=Ai

14、)0,j=0;jn;j+)if(Ai)jmin)求一行中的母小值Alor(j=OJnj+)if(Aijl=min判阍这个(些)最小值是否鞍点”/(fb(ag=l,k=O;km;k+)if(minx,这情况下向j小的方向维埃查找:二是Ai,jx,下步应向i大的方向查找:三是Ai,j-x.查找成功.否则,若下班已超出范围,则查我失败.voidsearch(ElementTypeA,intm,intn,ElementTypex,int*row,int*column)/m*n的矩阵b,本算法查找X在矩阵b中的位置(*row,*column)/ii-0;j-n;flag-0;*flag是成功查到X的标志

15、”uhile(i=0&!flag)if(bij=)flag=l;elseif(bjx)j:elsei+:if(11ag)*ro=i;*column=j;A.datapc.r=x;.datapc.c=.datapa).c;A.datapc.d=A.datapa.dpa”;PC+;1)while(A.datapa=x)*插入A中剜余的元素第X行)”.datapc.r=x;A.Jata(pc).c=A.data(pa).c;,datac.d=A.datapa.dpa14;PCwhiIe(B.datapb=x)/*插入B中剩余的元素(第X行)*/.datapc.r-x;.datapcj.c=B.dat

16、aipb.c;A.data(pcj.d=B.data(pb).d;pb+:pc+;A.nms=pc;for(i=,hubs;iMaxSize;i+)/*消除原来A中的元素*/(.datai.r=-l;A.datai.C=-I;A.datai.d=nil:第五章习题答案1.填空题(I)am.n.d.j.k.l.fca.cj.ki.m.ndg.h25533O(2)能唯一确定这榇二叉树.二叉树为:若给定先序序列和后序序列无法睢一确定一棵二叉树,因为根据先序序列虽可以确定根.但不可以根据后序序列确定左子树和右子树.如下面两榇二叉树,它们的先序序列和后序序列相同,但却确定了两探不同的二叉树.II注;函数

17、BSTSearch1.BSTDeIete参阅教材7.3.3.7.3.4,第8章习题答案1,填空题(1) i(2) n-l(3) n/2(4) O(n2)(5) O(n)(6)冒泡排序(7)希尔排序(8)直接插入排序(9)插入排序、选择排序(10) 79,46,71,35,41.25,56(11) 25.41.35.46.56.79.71(12) n/2n-lO(nlogn)(13)正反反(14)宜接选择排序、希尔排序、堆排序、快速排序(15)堆排序、快速排序、归并排序、归并排序、快速推序、堆排序2、判断题(1) (2)3)(4)X(5)(6) (7)8)(9)(10)3、简答题略(参考教材写)

18、.(2)易于链表实现的是插入持序、归并排序和基数排序(3)初始状态为逆序时.直接插入、直接选择和冒泡排序的比较次数分别为(n+2)(n-l)2.n(n-l)2,n(n-l)2.移动次数分别为(n+4)(n-l)2,3(n-l),3n(n-l)2,因此文件逆序时采用直接选择排序较好。(4)在初始状态为逆序情况下,采用冒泡排序是稔定排序。(5)高度为h的堆,最多有2lM个元素,最少有2h4个元素。在高度为h的大顶堆中,关键字最小的元素存放在堆的第h层上的最后个元素的位置W上,其中2Ww2h-l,(6)燃好选用堆排序,对比其他效率较高的排序算法,大都是在排序结束后才能确定数据元素的全部顺序,而无法知

19、道排序过程中部分元素的有序性,而堆排序则每次输出一个极值元素,且比较次数不超过|_10七“,耍好丁如冒泡排序、选择排序等简单排序算法,由题意,只选择前10个大元素,所以可以利用大顶堆进行排序。(7)d是8,分配和收集8趟,rd是26,队列个数26。(8)是大顶堆不是堆,可以调整为下面的小顶堆1234567891012243065335648988670是大顶堆不是堆,可以把它调整为下面的小顶堆23456789IOIl120523203528382961567640I(X)4、算法设计题(1)分析与解答给head单涟表设置个附加表头结点,在排序过程中,单链表分成两个子表,即排序子表和未排序子表,

20、首先将单链表的头结点和第一个结点看成是已经排序的子表,设置rear指针指向已排序子表的最后一个结点,初始时也就是维链表的第个结点。设置h指针指向未排序子表的第个结点,初始时也就是单依表的第二个结点,每次取出未排序子表的第一个结点,将其插入到前面已排序子表的合适位置上。设置q指针从已排序子表的第个结点出发,顺序查找合适位S:并设置指针P用来跟踪q的直接前驱,以便插入操作。typcdefstructnodeintdata;SInIClnode*ncxt;1.istNode;typedef1.istNode*1.ink1.ist;Instersort(1.ink1.isthead)(1.istNod

21、c*p.*q.*h.*rcar:rear=head-next;产rear指向已排序子表的最后一个结点,初始时为单链表的第一个结点*/h=rear-next:*h指向未排序了表的第个结点*/while(H=NU1.1.)if(hdatarear-data)p=head:q=p-nexl;*从已排序子表的第一个结点出发,找插入位置*/WhiIe(q-datah-data)(P=q;q=q-next;realnexl=h-*next:*从未排序子表中分高出h结点*/h-next=q;/*将h结点插入到已排序子表的P和q之间*/PfneXt=h:h-rear-next;*h指向卜.一个待插入的结点*/

22、elserear=h;h=h-next;(2) i从左向右扫描数组,找到正数后,j从右向左扫描数组,找到负数后,交换i、j位置上的数据,然后i继续向右扫描,反笑执行上述操作,直到i和相遇。defineMaxSizc100/*待排序记录可能达到的最大长度*/Iypedefstruct/*记录类型*/KeyTypekey;/*关键字项*/InfoTypeOtherData:/*其他数据项,InfoTypQ根据实际情况定义*/JRecordType:typcdefRccordTypeRccDataMaxSizc;*RccData为眼序表类型*/voidResort(RecDalar)inti=O,j

23、=n-l;RecordTypex;dowhile(ij&ri.kcyi&rj.koy0)j;if(ij)x=ri:ri=rj:rj=x:i+;j-;while(ij);)(3)voidBubblcSort(RccDatar,intn)*自下往上扫描的冒泡持序算法*/(intlastexchange,j,i0,x:while(ii:j)*自下,往上扫描r0.i*/if(rj-l.keyrj.key)*rjT和rj交换/x=rj:rj=rj-l;rj-l)=x:Iastexchange=J:i=lastexchange:)(4)排序结束条件为没有交换元素为止或进行r几趟排序.函数描述如卜.:voi

24、dQrsort(RccDatar)/*排序元素r0-rn-l*/i11ti,flag:RecordTypet:doflag=O;for(i-0;iri+l.key)flag=l:t=ri+l;ri+l=ri;ri=tzi+;)for(i=l:iri+l.key)flag=l:t=ri+l;ri+l=ri;ri=t:i+:)Jwhilc(glag!=O):(5)略(参考教材1(6)设向量C有IO个元素,其值在09之间,如下图所示:O12345678?119O5-138762根据题意排序结果如下图所示:l01234567890123456789兑法描述如下:Sort(intc,intb,intn)

25、(inti;for(i=0;in;i+)bci=ci;)(7)堆的类型定义:SdefineN50typedestructelement;KeyTypckey:RecType:typedefstructlist;KcyTypeRN;intn:)Seq1.ist;voidHeaPDel.ele(Seq1.isl*heap,inti)(intj;heap-Ri=heap-*Kn;*Ki堆底元素交换位置*/heap-*11-=l:Heapify(heap,i,haep-n);/*调用调整堆算法*/)Heapify(Seq1.ist+heap,inti;intbase)/*将Ri.base调整为堆*/(inij;RecTypetcmp=heap-Ri:for(j=2*i:j=base:j*=2)if(jbase&heap-Rj.keyheap-RCj+l.key)j+:/*若i有右孩子,口右孩子大于左孩子,则让j指向右孩子*/if(heap-R(j.key=temp.key)break:heap-Ri-heap-*RIjJ;i=j;)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号