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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构习题有标准答案.docx

1、数据结构习题有标准答案第1章绪1.1有下列几种二兀组表示的数据结构,试画出它们分别对应的图形表示,(1)集合并指出它们分别属于何种结构。(1) A= ( D,R ),其中,D = a 1,a?.a 3,at , R= 线性表(2) B= ( D,R ),其中,D = a,b,c,d,e, R= (a,b),(b,c),(c, d), 1 2(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) K= ( D ,R ),其中,D = 1 ,2, 3,4,5,6,R= , , , , , ,

2、树丄 图1.2设n为正整数,求下列各程序段中的下划线语句的执行次数。(1) i=1; k=0(2) for (in t i=1; i=n; i+)解:while(i=n-1)for (int j=1; j=n; j+)(1) n-1 cij=0;n nn:仁n3k+=10*i ;for (i nt k=1; k=n; k+)i+;cij=cij+aik*bkji =1 j mkT(3) x=0; y=0;n i jEEEn i n仁送送j乏i(i+1) 一1卄+匸1 .n( n+1)(2 n+1)+ 1 . n(n+1)for (int i=1; i=n; i+)i=t j=t k i zi2

3、 2耳2 tt2 6 2 2for (int j=1; j=i; j+)n(n +1)( n*2)for (int k=1; k=j; k+)6x=x+v;1.3指出下列个算法的功能,并求其时间复杂度。(1) int sum1(i nt n)int p=1,s=0;for (int i=1;i=n; i+) p*= i; s+=p; return s; int sum2 (int n) int s=0;for ( int i=1; i=n; i+) int p=1;for (int j=1; j=i; j+) p*=j; s+=p;解:n i! , T(n)=0(n)n(2) i! , T(n

4、)=O(n2)iVreturn s;1.4算法设计有3枚硬币,其中有 天平,找出伪币?以流程图表示算法。上机练习题要求:给出问题分析、算法描述、源程序及运行截图,在线提交。1.设a, b, c为3个整数,求其中位于中间值的整数。第2章线性表1.设计算法:在顺序表中删除值为 e的兀素,删除成功,返回1; 否则,返回0。int Sqlist:DeleteElem( T e ) for (i=1; i=length; i+) / 按值顺序查找 * i可从0开始if (elemi-1= =e) / 找到,进行删除操作 for ( j=i; jlength; j+) / ai 至 an 依次前移Elem

5、j-1 = elemj;length - - ; / 表长减一return 1 ; 删除成功,返回 1return 0 ; /未找到,删除不成功,返回 02.分析顺序表中兀素疋位算法 int SqList:Locate ( T e )的时间复杂度。解:设表长为n,等概率下,每个兀素被定位的概率为: p-1/n疋位成功第i个兀素,需比较i次、二 1 . 1 二.1 n(n + 1) n + 1f (n) _迟 _ Z i -im n n i二 n 2 23对于有头结点的单链表,分别写出定位成功时,实现下列定位 语句序列。(1)定位到第i个结点ai ;p=head; j=0;while ( p &

6、 jn ext; j+;定位到第i个结点的前驱a-1 ;p=head; j=0;while ( p & j next; j+;(3)定位到尾结点;p=head;while ( p -next )p=p-n ext;(4)定位到尾结点的前驱。p=head;while ( p-n ext- next ) p=p-n ext;4描述一下二个概念的区别:头指针,头结点,首兀结点。并给头指针:是一个指针变量,里面存储的是链表中首结点的地址,并以此来标识一个链表。予图示。头结点:附加在第一个兀素结点之前的一个结点,头指针指向头结点。首兀结点:指链表中的第一个兀素结点。头指针头结点首(元)结点 尾(元)结点

7、ai a2丨 T n a5.对于无头结点单链表,给出删除第 i个结点的算法描述。template T LinkList:Delete(int i)template T LinkList:Delete(int i) /在单链表上删除第i个数据元素if ( head=NULL) throw 表空!”;/ 空表,不能删 else if ( i=1) /删除第1个兀素p=Head; x=p-data; /保存被删兀素值Head= p-n ext ;delete p ;else /兀素疋位到第 ai-1p=Head; j=1 ; /疋位查找起始位置while p- next & jn ext; j+ ;

8、 if ( !p- next | ji-1 ); / 定位失败throw删除位置不合理;else /定位成功,进行结点删除q=p-n ext;x=pdata;p-n ext=q-n ext; delete q;retrun x; /返回被删除兀素值/#6.用教材定义的顺序表的基本操作实现下列操作: template int DeleteElem(SqList L, T e)#include SqList.h “ template int DeleteElem(SqList L, T e) /i = L.LocateElem(e) ; / 按值杳找if (!i) /未找到return 0;els

9、e /找到delete (i) ; /删除被找到的元素 7.已知L是有表头结点的单链表,且 P结点既不是首兀结点,也不是尾结点,试写出实现下列功能的语句序列。(1)在P结点后插入S结点;(2)在P结点前插入S结点;(3)在表首插入S结点;(4)在表尾插入S结点.【解】(1) s-next=p-next; p-next=s; q=L;while( q-n ext!=p) q=q-n ext;s-next=p 或 q-next ;q _n ext=s;(3) s-n ext=L-n ext; L-n ext=s; q=L;while( q-n ext!=NULL) q=q-n ext;s-n ex

10、t= q-n ext ; q-n ext=s;上机练习题要求:给出问题分析、算法描述、源程序及运行截图,在线提交。编程实现:删除单链表中值为 e的兀素。第3章栈与队列1.铁路进行列车调度时,常把站台设计 成栈式结构的站台,如右图所示。试问: 若进站的六辆列车顺序如上所述 ,那么是否能够得到325641和154623的出站序 列,如果不能,说明为什么不能;如果能, 说明如何得到(即写出”进栈”或”出栈”的 序列)。2.简述以下算法的功能(栈的兀素类型为 int )。 status algo_1( SqStack S ) int i, n, A 255;n=0;while (!S.StackEmp

11、ty() ) n+; An= S.Pop(); for ( i=1; i= n ; i+) S.Push(Ai);(2) status algo_2(SqStack S, int e) SqStack T;int d;while (!S.tackEmpty() d = S. Pop();if (d!=e ) T.Push(d); while (!T.StackEmpty() d=T .P op();T.Push(d); 解:(1)借助一个数组,将栈中的兀素逆置。(2)借助栈T,将栈S中所有值为e的数据元素删除之。3.编写一个算法,将一个非负的十进制整数 N转换为B进制数, 并输出转换后的结果。

12、 当N=248D,B分别为8和16时,转换后 的结果为多少?#include stack.h”int NumTrans( int N, int B) /十进制整数 N转换为B进制数stack S; / 建立一个栈while( N!=0) / N 非零i=N%B ; /从低到高,依次求得各位N=N/B;S.push(i); / 各位入栈 while ( !S.StackEmpty() / 栈不空 i= S.pop();If (i9) i= 10-i;cout S.pop(); /依次出栈,得到从咼到低的输出结果/#4借且栈,设计算法:假设一个算术表达式中包含 “(、” “括号,对一个合法的数学表

13、达式来说,括号 “(和 “)应是相互匹配的。若匹配,返回1 ;否则,返回0。解:以字符串存储表达式,也可以边输入边判断。顺序扫描表达式,左括号,入栈;右括号,如果此时栈空,表示多右括号,不匹 配;如果栈不空,出栈一个左括号。扫描结束,如果栈空,表示括号匹配;否则,括 号不匹配,多左括号。int blank_match(char *exp) 用字符串存表达式SqStack s; / 创建一个栈char *p=exp; 工作指针p指向表达式首 while ( *p!= = ) /不是表达式结束符switch(p) case (: 左括号,入栈s.push(ch); break;case ) /右括

14、号if (s.StackEmpty() return 0; / 栈空,不匹配,多右括号else s.Pop(); break; / 左括号出栈/switchp+; /取表达式下一个字符 / whileif (!s.StackEmpty() / 表达式结束,栈不空return 0 ; /不匹配,多左括号 elsereturn 1 ; / 匹配 /#5.简述栈和队列的逻辑特点,各举一个应用实例。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 ! | A&B|!(E

15、F)7计算后缀表达式:4 5 * 3 2 + -的值。解:158将下列递推过程改写为递归过程。解:void recurisi on (i nt j)void recurs ion( int n ) if (j1)int i=n; cour1) recurisi on (j-1); cout x;cin x;if (x=0) sum=0;while (x) else S.push(x);test(sum); sum+=x; cin x; coutsum;sum=0;coutsum;while ( x=S.pop() ) sum+=x; coutsum; II10.简述以下算法的功能(栈和队列的兀

16、素类型均为 int )。解:禾U用栈,将队列中的兀素逆置void algo (Queue &Q)Stack S; II 创建一个栈int d;while (!Q.QueueEmpty() d=DeQueue(Q); S. Push(d); while (!S.StackEmpty() d=S.Pop();Q.E nQueue(d); 12.假设以数组sem存放循环队列的兀素,冋时设变量 rear和front分别作为队首、队尾指针,且队首指针指向队首前一个位置, 队尾指针指向队尾兀素处,初始时, rear=fornt=-1。与出这样设计的循环队列入队、出队的算法。解:米用教材队空与队满判别方法。

17、为了区分队空与队满条件,牺牲一个兀素空间。 即:rear=front, 为队空;rear=(front+1)%m,为队满。template void EnQueue( T Se, T e, int m ) II 入队if ( rear+1)%m =fornt ) II 队满,不能插入throw 队满,不能插入!”else rear = (rear+1) % m ; II队尾指针后移serear=e; II 兀素入队return ;II#template T DnQueue( T Se, int m ) II 出队if ( rear= =fornt ) II队空,不能出队!throw 队空,不能

18、出队!”else front = (fron t+1)%m ; II指针后移,指向队首兀素 e =sefront; II取队首兀素return e ; /#上机练习题要求:给出问题分析、算法描述、源程序及运行截图,在线提交。1借助栈,实现单链表上的逆置运算。1试问执行以下函数会产生怎样的输出结果 ?void dem on strate()StrAssig n( s, THIS IS A BOOK);StrRep ( s, StrSub(s, 3, 7), ESE ARE);StrAssig n( t, StrCo neat ( s, S);StrAssig n(u, XYXYXYXYXYXY)

19、;StrAssig n(v, StrSub ( u, 6, 3 );StrAssig n(w, W);eout “ t=” tendl;eout “v= ” v;eout “ u= ” StrRep(u, v, w); / dem on strate解: t= THESE ARE BOOKS v= YXYw= XWXWXW2.设字符串 S= aabaabaabaae , P= aabaae1) 给出S和P的next值和nextval值;2) 若S作主串,P作模式串,试给出 KMP算法的匹配过程。1) S 的 next 与 nextval 值分别为 012123456789 和 00200200

20、2009, p 的 next 与 nextval 值分别为 012123 和 0020032)利用KMP算法的匹配过程:第一趟匹配:aabaabaabaaeaabaae(i=6,j=6)第二趟匹配: aabaabaabaae(aa)baae第三趟匹配:aabaabaabaae( 成功)(aa)baae3.算法设计 串结构定义如下:struet SStri ngchar *data; / 串首址int len; / 串长int StrSize ; /存放数组的最大长度.;(1)编写一个函数,计算一个子串在一个字符串中出现的次数, 如果不出现,则为 0。int str_co un t (SStri

21、 ng S, SStri ng T )解:int str_cou nt (SStri ng S, SStri ng T) int i, j,k, coun t=0;for ( i=0; S.datai; i+) for ( j=i, k=0; (S.dataj=T.datak; j+,k+) if ( k= =T.le n-1)count + +;retur n count; 编写算法,从串s中删除所有和串t相同的子串。解:int SubString_Delete(SString &s, SString t )从串s中删除所有与t相同的子串,并返回删除次数for ( n=0, i=0; i=s

22、.le n-t.le n; i+ )for ( j=0; j t.len)/找到了与t匹配的子串for ( k = i; ksen-t.le n; k+ )sk=sk+t.len; / 左移删除s.len-=t.le n ;n+; II被删除次数增1 /for return n;/Delete_SubStri ng(2)编写一个函数,求串 s和串t的一个最长公共子串。void maxcomstr( SStri ng *s, SStri ng *t)解:void maxcomstr( SString *s, SString *t) in t i ndex=0,le n1=0, i,j,k,le

23、n2;i=0; /作为扫描s的指针while ( i s.len) j = 0; /作为扫描t的指针while ( j len1) / 将较大长度者给 index 和 Ien1in dex=i;len 1=le n2;j + = len2; /ifelse j+;/whilecout最长公共子串:for ( i=0; ile n1; i+;)couts.datai ndex+1;/ #1.已知下列字符串a = THIS, f = A SAMPLE, c = GOOD, d =NE, b =:s = StrCo ncat(a,StrCo ncat(StrSub(f,2,7),StrCo ncat

24、(b, StrSub (a,3,2),t = StrRep(f, StrSub (f,3,6),c),u = StrCo ncat(StrSub(c,3,1),d), g = IS,v = StrCo ncat(s,StrCo ncat(b,StrCo ncat(t,StrCo ncat(b,u),试问:s, t, v, StrLength(s), StrIndex(v,g), StrIndex(u,g) 各是什么?已知:s=(XYZ)+* , t=(X+Z)*Y。试利用下列运算,将 s转化为t。联接:StrCo neat ( & S,T )求子串:(char *) StrSub( S, i,

25、 le n )置换:StrRep ( &S, T, R )上机练习题要求:给出问题分析、算法描述、源程序及运行截图,在线提交。串结构定义如下:struct SStri ngchar *data ; / 串首址int len; / 串长int StrSize ; /存放数组的最大长度.;求:串S所含不冋字符的总数和每种字符的个数, 不区分央文字母的大小写。第5章数组与压缩矩阵1假设有二维数组 A6X3,每个兀素用相邻的 6个字节存储,存储器按字节编址。已知 A的起始存储位置(基地址)为1000,计算:(1)数组A的体积(即存储量);(2)数组A的最后一个兀素 a57的第一个字节的地址;(3)按行存储时,兀素 a14的第一个字节的地址;(4)按列存储时,兀素 a47的第一个字节的地址。解:(1) 6X 8X 6 = 288Byte(2) 1000+288-6=1282 ;(3) 1000+(1 X 8+4) X 6=1072(4) 1000+(7 X 6+4) X 6=127

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

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