ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:26.84KB ,
资源ID:5043701      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5043701.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构习题有答案讲解.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构习题有答案讲解.docx

1、数据结构习题有答案讲解第1章绪有以下几种二元组表示的数据结构,试画出它们分别对应的图形表示,并指出它们分别属于何种结构。A=(D,R),其中,D=a1,a2,a3,a4,R=B=(D,R),其中,D=a,b,c,d,e,R=(a,b),(b,c),(c,d),(d,e)(3)C=(D,R),其中,D=a,b,c,d,e,f,g,R=(d,b),(d,g),(b,a),(b,c),(g,e),(e,f)(4)K=(D,R),其中,D=1,2,3,4,5,6,R=,设n为正整数,求以下各程序段中的下划线语句的执行次数。(1)i=1;k=0 (2)for(inti=1;i=n;i+)while(i=

2、n-1) for(intj=1;j=n;j+) cij=0;k+=10*i; for(intk=1;k=n;k+)i+; cij=cij+aik*bkj (3)x=0; y=0;for(inti=1;i=n;i+)for(intj=1;j=i;j+)for(intk=1;k=j;k+)x=x+y;集合a b c d e线性表1dbgace3(3)树f图(4)解:(1)n-1nnn(2)1n3i1j1k1nij1nijni(i1)1ni21ni(3)i1j1k1i1j1i122i12i1n(n1)(n 2)625461 n(n 1)(2n1) 1 n(n 1)2 6 2 2指出以下个算法的功能,

3、并求其时间复杂度。(1)intsum1(intn) (2)intsum2(intn) ints=0;intp=1,s=0; for(inti=1;i=n;i+)for(inti=1;i=n;i+) intp=1;p*=i;s+=p; for(intj=1;j=i;j+)p*=j;return s; s+=p; returns;算法设计有3枚硬币,其中有1枚是假的,伪币与真币重量略有不同。如何借用一架天平,找出伪币?以流程图表示算法。上机练习题要求:给出问题分析、算法描述、源程序及运行截图,在线提交。1.设a,b,c为3个整数,求其中位于中间值的整数。解:n(1)i!,T(n)=O(n)i1nT

4、(n)=O(n2)(2)i!,i1开始是A=B?C是伪币否是A=C?B是伪币否A是伪币结束第2章线性表1.设计算法:在顺序表中删除值为e的元素,删除成功,返回1;intSqlist:DeleteElem(Te)否那么,返回0。for(i=1;i=length;i+)/按值顺序查找*i可从0开始if(elemi-1=e)/找到,进行删除操作for(j=i;jlength;j+)/ai至an依次前移Elemj-1=elemj;length-;/表长减一return1;/删除成功,返回1return0;/未找到,删除不成功,返回02.分析顺序表中元素定位算法intSqList:Locate(Te)解

5、:设表长为n,等概率下,每个元素被定位的概率为:p=1/n的时间复杂度。定位成功第i个元素,需比拟i次nf(n)i 11i1ni1n(n1)n1nni1n223.对于有头结点的单链表,分别写出定位成功时,实现以下定位语句序列。(2)定位到第i个结点ai;定位到第i个结点的前驱ai-1;p=head;j=0;while(p&jnext;j+;p=head;j=0;while(p&jnext;j+;(3)定位到尾结点;p=head;while(p-next)p=p-next;(4)定位到尾结点的前驱。p=head;while(p-next-next)p=p-next;4.描述一下三个概念的区别:头

6、指针,头结点,首元结点。并给头指针:是一个指针变量,里面存储的是链表中首结点的地址,并以此来标识一个链表。予图示。头结点:附加在第一个元素结点之前的一个结点,头指针指向头结点。首元结点:指链表中的第一个元素结点。头指针头结点首(元)结点尾(元)结点.ana1a25.对于无头结点单链表,给出删除第i个结点的算法描述。templatetemplateTLinkList:Delete(inti)/在单链表上删除第i个数据元素TLinkList:Delete(inti)if(head=NULL)throw“表空!;/空表,不能删elseif(i=1)/删除第1个元素p=Head;x=p-data;/保

7、存被删元素值Head=p-next;deletep;else/元素定位到第ai-1p=Head;j=1;/定位查找起始位置whilep-next&jnext;j+;if(!p-next|ji-1);/定位失败throw“删除位置不合理;else/定位成功,进行结点删除q=p-next;x=pdata;p-next=q-next;deleteq;retrunx;/返回被删除元素值/#6.用教材定义的顺序表的根本操作实现以下操作:#include“templatetemplateintDeleteElem(SqListL,Te)intDeleteElem(SqListL,Te)/i=L.Locat

8、eElem(e);/按值查找7.L是有表头结点的单链表,且P结点既不是首元结点,也不是尾结点,试写出实现以下功能的语句序列。在P结点后插入S结点;在P结点前插入S结点;在表首插入S结点;在表尾插入S结点.上机练习题要求:给出问题分析、算法描述、源程序及运行截图,在线提交。编程实现:删除单链表中值为 e的元素。if(!i) /未找到return0;else /找到delete(i);/ 删除被找到的元素【解】s-next=p-next;p-next=s;q=L;while(q-next!=p) q=q-next;s-next=p 或q-next;-next=s;s-next=L-next;L-n

9、ext=s;q=L;while(q-next!=NULL) q=q-next;s-next=q-next;q-next=s;第3章栈与队列铁路进行列车调度时,常把站台设计成栈式结构的站台,如右图所示。试问:假设进站的六辆列车顺序如上所述,那么是否能够得到325641和154623的出站序列,如果不能,说明为什么不能;如果能,说明如何得到(即写出进栈或出栈的序列)。解:325641可以154623不可以。1234562.简述以下算法的功能栈的元素类型为int。解:(1)借助一个数组,将栈中的元素逆置。(1)statusalgo_1(SqStackS)inti,n,A255;n=0;while(!

10、S.StackEmpty()n+;An=S.Pop();(2)借助栈T,将栈S中所有值为e的数据元素删除之。for(i=1;i=n;i+)S.Push(Ai);(2)statusalgo_2(SqStackS,inte)SqStackT;intd;while(!S.tackEmpty()d=S.Pop();if(d!=e)T.Push(d);while(!T.StackEmpty()d=T.Pop();T.Push(d); 3.编写一个算法,将一个非负的十进制整数 N转换为B进制数,并输出转换后的结果。当N=248D,B分别为8和16时,转换后的结果为多少?#include“intNumTra

11、ns(intN,intB)/十进制整数N转换为B进制数stackS;/建立一个栈while(N!=0)/N 非零i=N%B;/ 从低到高,依次求得各位N=N/B;S.push(i);/各位入栈while(!S.StackEmpty()/栈不空i=S.pop();If(i9)i=A+10-i;coutS.pop();/依次出栈,得到从高到低的输出结果/#4借且栈,设计算法:假设一个算术表达式中包含“(、“)括号,解:以字符串存储表达式,也可以边输入边判断。对一个合法的数学表达式来说,括号“(和“)应是相互匹配的。顺序扫描表达式,左括号,入栈;右括号,如果此时栈空,表示多右括号,不匹假设匹配,返回

12、1;否那么,返回0。配;如果栈不空,出栈一个左括号。扫描结束,如果栈空,表示括号匹配;否那么,括号不匹配,多左括号。intblank_match(char*exp)用字符串存表达式SqStacks;/创立一个栈char*p=exp;/工作指针p指向表达式首while(*p!=)/不是表达式结束符switch(p)case(:/左括号,入栈s.push(ch);break;case)/右括号if(s.StackEmpty()return0;/栈空,不匹配,多右括号elses.Pop();break;/左括号出栈/switchp+;/ 取表达式下一个字符/whileif(!s.StackEmpty

13、()/ 表达式结束,栈不空return 0;/不匹配,多左括号elsereturn1;/ 匹配/#简述栈和队列的逻辑特点,各举一个应用实例。6.写出以下中缀表达式的后缀表达式。(1)A-B+C-D+(1)-A+B-C+D(2)AB+D*EFAD*+/+C+(2)(A+B)*D+E/(F+A*D)+C(3)AB&EF!|(3)A&B|!(EF)7.计算后缀表达式:45*32+-的值。解:158.将以下递推过程改写为递归过程。解:voidrecurision(intj)voidrecursion(intn) inti=n;while(i1) if(j1) courj;recurision(j-1)

14、;coutx;cinx;if(x=0)sum=0;while(x)elseS.push(x);test(sum);sum+=x;cinx;coutsum;sum=0;coutsum;while(x=S.pop()sum+=x;coutsum;/10. 简述以下算法的功能栈和队列的元素类型均为 int 。 解:利用栈,将队列中的元素逆置voidalgo(Queue &Q)StackS;/ 创立一个栈int d;while (!Q.QueueEmpty() d=DeQueue(Q);S.Push(d); while (!S.StackEmpty() d=S.Pop();Q.EnQueue(d);

15、12.假设以数组 sem存放循环队列的元素,同时设变量 rear和front分别作为队首、队尾指针,且队首指针指向队首前一个位置,队尾指针指向队尾元素处,初始时,rear=fornt=-1。写出这样设计的循环队列入队、出队的算法。解:采用教材队空与队满判别方法。为了区分队空与队满条件,牺牲一个元素空间。即:rear=front,为队空;rear=(front+1)%m,为队满。templatevoidEnQueue(TSe,Te,intm) /入队if(rear+1)%m=fornt) /队满,不能插入throw “队满,不能插入 !elserear=(rear+1)%m;/ 队尾指针后移se

16、rear=e;/元素入队return;/#templateTDnQueue(TSe,intm) / 出队if(rear=fornt) /队空,不能出队 !throw “队空,不能出队 !else front=(front+1)%m;/ 指针后移,指向队首元素e=sefront;/ 取队首元素returne; /#上机练习题要求:给出问题分析、算法描述、源程序及运行截图, 在线提交。1.借助栈,实现单链表上的逆置运算。第4章串1.试问执行以下函数会产生怎样的输出结果 ?voiddemonstrate()StrAssign(s,THISISABOOK);StrRep(s,StrSub(s,3,7)

17、,ESEARE);StrAssign(t,StrConcat(s,S);StrAssign(u,XYXYXYXYXYXY);StrAssign(v,StrSub(u,6,3);StrAssign(w,W);cout“t=tendl;cout“v=v;cout“u=StrRep(u,v,w);/demonstrate2.设字符串 S=aabaabaabaac,P=aabaac1给出S和P的next值和nextval 值;2假设S作主串,P作模式串,试给出 KMP算法的匹配过程。算法设计串结构定义如下:structSString解:t=THESEAREBOOKSv=YXYw=XWXWXW1S的ne

18、xt与nextval值分别为和002002002021,p的next与nextval值分别为012123和0020032利用KMP算法的匹配过程:第一趟匹配:aabaabaabaacaabaac(i=6,j=6)第二趟匹配:aabaabaabaac(aa)baac第三趟匹配:aabaabaabaac( 成功)(aa)baacchar*data; /串首址intlen; /串长intStrSize;/存放数组的最大长度 .;编写一个函数,计算一个子串在一个字符串中出现的次数,如果不出现,那么为0。intstr_count(SStringS,SStringT)(2)编写算法,从串 s中删除所有和串

19、 t相同的子串。解:intstr_count(SStringS,SStringT) inti,j,k,count=0;for(i=0;S.datai;i+) for(j=i,k=0;(S.dataj=T.datak;j+,k+)if(k=T.len-1)count+;returncount;解:intSubString_Delete(SString&s,SStringt)/从串s中删除所有与 t相同的子串,并返回删除次数for(n=0,i=0;it.len)/找到了与 t匹配的子串for(k=i;ks.len-t.len;k+)sk=sk+t.len;/左移删除编写一个函数,求串s和串t的一个

20、最长公共子串。voidmaxcomstr(SString*s,SString*t);n+;/ 被删除次数增 1 /forreturnn;/Delete_SubString解:voidmaxcomstr(SString*s,SString*t)intindex=0,len1=0,i,j,k,len2;i=0; /作为扫描 s的指针while(is.len) j=0; /作为扫描 t的指针while(jlen1) / 将较大长度者给 index和len1index=i;len1=len2;j+=len2;/ifelse j+;/whilecout最长公共子串: for(i=0;ilen1;i+;)

21、couts.dataindex+1;/#以下字符串a=THIS,f=ASAMPLE,c=GOOD,d=NE,b=,s=StrConcat(a,StrConcat(StrSub(f,2,7),StrConcat(b,StrSub(a,3,2),t=StrRep(f,StrSub(f,3,6),c),u=StrConcat(StrSub(c,3,1),d),g=IS,v=StrConcat(s,StrConcat(b,StrConcat(t,StrConcat(b,u),试问:s,t,v,StrLength(s),StrIndex(v,g),StrIndex(u,g) 各是什么?:s=(XYZ)+

22、*,t=(X+Z)*Y 。试利用以下运算,将 s转化为t。联接:StrConcat(&S,T)求子串:(char*)StrSub(S,i,len)置换:StrRep(&S,T,R)上机练习题要求:给出问题分析、算法描述、源程序及运行截图, 在线提交。串结构定义如下:structSStringchar*data;/串首址int len;intStrSize;/串长/存放数组的最大长度.;求:串S所含不同字符的总数和每种字符的个数,不区分英文字母的大小写。第5章数组与压缩矩阵1.假设有二维数组A68,每个元素用相邻的6个字节存储,存储器按解:(1686=288Byte字节编址。A的起始存储位置(基

23、地址)为1000,计算:(21000+288-6=1282;(1)数组A的体积即存储量;(31000+(18+4)6=1072(2)数组A的最后一个元素a57的第一个字节的地址;(41000+(76+4)6=1276(3)按行存储时,元素a14的第一个字节的地址;(4)按列存储时,元素a47的第一个字节的地址。2.假设按低下标优先存储整数数组A9358时,第一个元素的字节地址是100,每个整数占四个字节。问以下元素的存储地址是什么?(1)a0000(2)a8247解:(1)100(2)100+8358+258+48+7=45003一个稀疏矩阵如下图030000(1)020500给出三元组存储示意图;A=00000(2)给出带行指针向量的链式存储示意图;090000146(3)十字链表存储示意图。M.dataije00131112213533094351465(2)(1)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1