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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

算法与数据结构C语言版课后习题答案机械工业出版社第34章 习题参考答案Word文件下载.docx

1、1 2 3顺序入栈,32出栈,得到部分输出序列32;然后45入栈,5出栈,部分输出序列变为325;接着6入栈并退栈,部分输出序列变为3256;最后41退栈,得最终结果325641。 得到135426的过程如下:1入栈并出栈,得到部分输出序列1;然后2和3入栈,3出栈,部分输出序列变为13;接着4和5入栈,5,4和2依次出栈,部分输出序列变为13542;最后6入栈并退栈,得最终结果135426。3.3 若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?【解答】2和 43.4 设栈S和队列

2、Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,一个元素出栈后即进队列Q,若6个元素出队的序列是e3,e5,e4,e6,e2,e1,则栈S的容量至少应该是多少?【解答】 43.5 循环队列的优点是什么,如何判断“空”和“满”。【解答】循环队列解决了常规用0-m-1的数组表示队列时出现的“假溢出”(即队列未满但不能入队)。在循环队列中我们仍用队头指针等于队尾指针表示队空,而用牺牲一个单元的办法表示队满,即当队尾指针加1(求模)等于队头指针时,表示队列满。也有通过设标记以及用一个队头或队尾指针加上队中元素个数来区分队列的“空”和“满”的。3.6 设长度为n的链队列用单循环链表

3、表示,若只设头指针,则入队和出队的时间如何?若只设尾指针呢?【解答】若只设头指针,则入队的时间为O(n),出队的时间为O(1)。若只设尾指针,则入队和出队的时间均为O(1)。3.7 指出下面程序段的功能是什么?(1) void demo1(SeqStack S)int i,arr64,n=0; while(!StackEmpty(S) arrn+=Pop(S); for(i=0;i1) printf(i-);【解答】void digui(int n)if(n1)printf(n); digui(n-1); 3.9 写出下列中缀表达式的后缀表达式: (1)A*B*C (2)(A+B)*C-D (

4、3)A*B+C/(D-E) (4)(A+B)*D+E/(F+A*D)+C【解答】(1)ABC* (2)AB+C*D- (3)AB*CDE-/+ (4)AB+D*EFAD*+/+C+3.10 选择题:循环队列存储在数组A0.m中,则入队时的操作为( )。 A. rear=rear+1 B. rear=(rear+1) % (m-1)C. rear=(rear+1) % m D. rear=(rear+1) % (m+1)【解答】D3.11 选择题:4个园盘的Hahoi塔,总的移动次数为( )。A.7 B. 8 C.15 D.16【解答】C3.12选择题:允许对队列进行的操作有( )。A. 对队列

5、中的元素排序 B. 取出最近进队的元素C. 在队头元素之前插入元素 D. 删除队头元素二、算法设计题3.13 利用栈的基本操作,编写求栈中元素个数的算法。【题目分析】 将栈值元素出栈,出栈时计数,直至栈空。【算法】 int StackLength(Stack S) /求栈中元素个数 int n=0;StackEmpty(S) n+; Pop(S); return n;算法讨论:若要求统计完元素个数后,不能破坏原来栈,则在计数时,将原栈导入另一临时栈,计数完毕,再将临时栈倒入原栈中。 int StackLength(Stack S)Stack T;StackInit(T); /初始化临时栈T P

6、ush(T,Pop(S);StackEmpty(T) Push(S,Pop(T);3.14 双向栈S是在一个数组空间Vm内实现的两个栈,栈底分别处于数组空间的两端。试为此双向栈设计栈初始化Init(S)、入栈Push(S,i,x)、出栈Pop(S,i)算法,其中i为0或1,用以指示栈号。题目分析两栈共享向量空间,将两栈栈底设在向量两端,初始时,s1栈顶指针为-1,s2栈顶为m。两栈顶指针相邻时为栈满。两栈顶相向、迎面增长,栈顶指针指向栈顶元素。#define ElemType int 假设元素类型为整型typedef struct ElemType Vm; 栈空间 int top2; top为

7、两个栈顶指针stk;stk S; S是如上定义的结构类型变量,为全局变量 栈初始化int Init() S.top0=-1; S.top1=m; return 1; /初始化成功 入栈操作:int push(stk S ,int i,int x)i为栈号,i=0表示左栈,i=1为右栈,x是入栈元素。入栈成功返回1,否则返回0if(i1)printf(“栈号输入不对n”);exit(0);if(S.top1-S.top0=1) printf(“栈已满n”);return(0);switch(i) case 0: S.V+S.top0=x; return(1); break;case 1: S.V

8、-S.top1=x;push 退栈操作 ElemType pop(stk S,int i) 退栈。i代表栈号,i=0时为左栈,i=1时为右栈。退栈成功返回退栈元素否则返回-1 if(i1)printf(“栈号输入错误n”); switch(i) if(S.top0=-1) printf(“栈空n”);return(-1); else return(S.VS.top0-); case 1: if(S.top1=m printf(“栈空n”); return(-1); else return(S.VS.top1+); switch 算法结束(4) 判断栈空int Empty();return (S

9、.top0=-1 & S.top1=m); 算法讨论 请注意算法中两栈入栈和退栈时的栈顶指针的计算。s1(左栈)是通常意义下的栈,而s2(右栈)入栈操作时,其栈顶指针左移(减1),退栈时,栈顶指针右移(加1)。3.15设以数组Qm存放循环队列中的元素,同时设置一个标志tag,以tag=0和tag=1来区别在队头指针(front)和队尾指针(rear)相等时,队列状态为“空”还是“不空”。试编写相应的入队(QueueIn)和出队(QueueOut)算法。 初始化SeQueue QueueInit(SeQueue Q) /初始化队列Q.front=Q.rear=0; Q.tag=0;return

10、Q;(2) 入队SeQueue QueueIn(SeQueue Q,int e) /入队列if(Q.tag=1) & (Q.rear=Q.front) printf(队列已满n); else Q.rear=(Q.rear+1) % m;Q.dataQ.rear=e; if(Q.tag=0) Q.tag=1; /队列已不空(3)出队ElemType QueueOut(SeQueue Q)/出队列if(Q.tag=0) printf(队列为空n elseQ.front=(Q.front+1) % m; e=Q.dataQ.front; if(Q.front=Q.rear) Q.tag=0; /空队

11、列 return(e);3.16假设用变量rear和length分别指示循环队列中队尾元素的位置和内含元素的个数。试给出此循环队列的定义,并写出相应的入队(QueueIn)和出队(QueueOut)算法。【算法设计】 (1)循环队列的定义typedef structElemType Qm; 循环队列占m个存储单元 int rear,length; rear指向队尾元素,length为元素个数SeQueue; (2) 初始化SeQueue QueueInit (SeQueue cq)cq为循环队列,本算法进行队列初始化 cq.rear=0; cq.length=0; return cq; (3) 入队SeQueue QueueIn(SeQueue cq,ElemType x)c

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

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