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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构课后习题解答第三章 栈与队列.docx

1、数据结构课后习题解答第三章 栈与队列第三章 栈与队列 3.15 typedef struct Elemtype *base2; Elemtype *top2; BDStacktype; /双向栈类型 Status Init_Stack(BDStacktype &tws,int m)/初始化一个大小为m的双向栈twstws.base0=(Elemtype*)malloc(sizeof(Elemtype);tws.base1=tws.base0+m;tws.top0=tws.base0;tws.top1=tws.base1;return OK;/Init_Stack Status push(BDS

2、tacktype &tws,int i,Elemtype x)/x入栈,i=0表示低端栈,i=1表示高端栈if(tws.top0tws.top1) return OVERFLOW; /注意此时的栈满条件if(i=0) *tws.top0+=x;else if(i=1) *tws.top1-=x;else return ERROR;return OK;/push Status pop(BDStacktype &tws,int i,Elemtype &x)/x出栈,i=0表示低端栈,i=1表示高端栈if(i=0)if(tws.top0=tws.base0) return OVERFLOW;x=*-

3、tws.top0;else if(i=1)if(tws.top1=tws.base1) return OVERFLOW;x=*+tws.top1;else return ERROR;return OK;/pop 3.16 void Train_arrange(char *train)/这里用字符串train表示火车,H表示硬席,S表示软席p=train;q=train;InitStack(s);while(*p)if(*p=H) push(s,*p); /把H存入栈中else *(q+)=*p; /把S调到前部p+;while(!StackEmpty(s)pop(s,c);*(q+)=c; /

4、把H接在后部/Train_arrange 3.17 int IsReverse()/判断输入的字符串中&前和&后部分是否为逆串,是则返回1,否则返回0InitStack(s);while(e=getchar()!=&)push(s,e);while(e=getchar()!=)if(StackEmpty(s) return 0;pop(s,c);if(e!=c) return 0;if(!StackEmpty(s) return 0;return 1;/IsReverse 3.18 Status Bracket_Test(char *str)/判别表达式中小括号是否匹配count=0;for(

5、p=str;*p;p+)if(*p=() count+;else if(*p=) count-;if (count1)if(gx-1y=old)gx-1y=color;EnQueue(Q,x-1,y); /修改左邻点的颜色if(y1)if(gxy-1=old)gxy-1=color;EnQueue(Q,x,y-1); /修改上邻点的颜色if(xm)if(gx+1y=old)gx+1y=color;EnQueue(Q,x+1,y); /修改右邻点的颜色if(y=0) s=0;else if(m0&n=0) s=n+g(m-1,2*n);else return ERROR;return OK;/g

6、 3.25 Status F_recursive(int n,int &s)/递归算法if(n0) return ERROR;if(n=0) s=n+1;elseF_recurve(n/2,r);s=n*r;return OK;/F_recursive Status F_nonrecursive(int n,int s)/非递归算法if(n0) return ERROR;if(n=0) s=n+1;elseInitStack(s); /s的元素类型为struct int a;int b;while(n!=0)a=n;b=n/2;push(s,a,b);n=b;/whiles=1;while(!

7、StackEmpty(s)pop(s,t);s*=t.a;/whilereturn OK;/F_nonrecursive 3.26 float Sqrt_recursive(float A,float p,float e)/求平方根的递归算法if(abs(p2-A)=e)p=(p+A/p)/2;return p;/Sqrt_nonrecursive 3.27 这一题的所有算法以及栈的变化过程请参见数据结构(pascal版),作者不再详细写出. 3.28 void InitCiQueue(CiQueue &Q)/初始化循环链表表示的队列QQ=(CiLNode*)malloc(sizeof(CiL

8、Node);Q-next=Q;/InitCiQueue void EnCiQueue(CiQueue &Q,int x)/把元素x插入循环链表表示的队列Q,Q指向队尾元素,Q-next指向头结点,Q-next-next指向队头元素p=(CiLNode*)malloc(sizeof(CiLNode);p-data=x;p-next=Q-next; /直接把p加在Q的后面Q-next=p;Q=p;/修改尾指针 Status DeCiQueue(CiQueue &Q,int x)/从循环链表表示的队列Q头部删除元素xif(Q=Q-next) return INFEASIBLE; /队列已空p=Q-n

9、ext-next;x=p-data;Q-next-next=p-next;free(p);return OK;/DeCiQueue 3.29 Status EnCyQueue(CyQueue &Q,int x)/带tag域的循环队列入队算法if(Q.front=Q.rear&Q.tag=1) /tag域的值为0表示空,1表示满return OVERFLOW;Q.baseQ.rear=x;Q.rear=(Q.rear+1)%MAXSIZE;if(Q.front=Q.rear) Q.tag=1; /队列满/EnCyQueue Status DeCyQueue(CyQueue &Q,int &x)/

10、带tag域的循环队列出队算法if(Q.front=Q.rear&Q.tag=0) return INFEASIBLE;Q.front=(Q.front+1)%MAXSIZE;x=Q.baseQ.front;if(Q.front=Q.rear) Q.tag=1; /队列空return OK;/DeCyQueue分析:当循环队列容量较小而队列中每个元素占的空间较多时,此种表示方法可以节约较多的存储空间,较有价值. 3.30 Status EnCyQueue(CyQueue &Q,int x)/带length域的循环队列入队算法if(Q.length=MAXSIZE) return OVERFLOW

11、;Q.rear=(Q.rear+1)%MAXSIZE;Q.baseQ.rear=x;Q.length+;return OK;/EnCyQueue Status DeCyQueue(CyQueue &Q,int &x)/带length域的循环队列出队算法if(Q.length=0) return INFEASIBLE;head=(Q.rear-Q.length+1)%MAXSIZE; /详见书后注释x=Q.basehead;Q.length-;/DeCyQueue 3.31 int Palindrome_Test()/判别输入的字符串是否回文序列,是则返回1,否则返回0InitStack(S);

12、InitQueue(Q);while(c=getchar()!=)Push(S,c);EnQueue(Q,c); /同时使用栈和队列两种结构while(!StackEmpty(S)Pop(S,a);DeQueue(Q,b);if(a!=b) return ERROR;return OK;/Palindrome_Test 3.32 void GetFib_CyQueue(int k,int n)/求k阶斐波那契序列的前n+1项InitCyQueue(Q); /其MAXSIZE设置为kfor(i=0;ik-1;i+) Q.basei=0;Q.basek-1=1; /给前k项赋初值for(i=0;i

13、k;i+) printf(%d,Q.basei);for(i=k;i=n;i+)m=i%k;sum=0;for(j=0;j=avr) /根据x的值决定插入在队头还是队尾Q.baseQ.rear=x;Q.rear=(Q.rear+1)%MAXSIZE; /插入在队尾elseQ.front=(Q.front-1)%MAXSIZE;Q.baseQ.front=x; /插入在队头return OK;/EnDQueue Status DeDQueue(DQueue &Q,int &x)/输出受限的双端队列的出队操作if(Q.front=Q.rear) return INFEASIBLE; /队列空x=Q

14、.baseQ.front;Q.front=(Q.front+1)%MAXSIZE;return OK;/DeDQueue 3.34 void Train_Rearrange(char *train)/这里用字符串train表示火车,P表示硬座,H表示硬卧,S表示软卧,最终按PSH的顺序排列r=train;InitDQueue(Q);while(*r)if(*r=P)printf(E);printf(D); /实际上等于不入队列,直接输出P车厢else if(*r=S)printf(E);EnDQueue(Q,*r,0); /0表示把S车厢从头端入队列elseprintf(A);EnDQueue(Q,*r,1); /1表示把H车厢从尾端入队列/whilewhile(!DQueueEmpty(Q)printf(D);DeDQueue(Q);/while /从头端出队列的车厢必然是先S后H的顺序 /Train_Rearrange

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

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