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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

习题三和上机答案上课讲义.docx

1、习题三和上机答案上课讲义习题三和上机答案习题三3.1设将整数a,b,c,d依次进栈,但只要出栈时栈非空,则可将出栈操作按任何次序夹入其中,请回答下述问题:(1)若执行以下操作序列Push(a), Pop(),Push(b),Push(c), Pop(), Pop( ),Push(d), Pop( ),则出 栈的数字序列为何(这里Push(i)表示i进栈,Pop( )表示出栈)?(2) 能否得到出栈序列adbc和adcb并说明为什么不能得到或者如何得到。(3)请分析 a,b ,c ,d 的所有排列中,哪些序列是可以通过相应的入出栈操作得到的。解:(1)acbd (2)执行以下操作序列Push(a

2、), Pop(),Push(b),Push(c), Push(d),Pop(), Pop( ), Pop( )就可以得到adcb 栈的特点是“后进先出”,所以不可能得到adbc (3)Push(a), Push(b),Push(c), Push(d),Pop(), Pop( ), Pop( ) ,Pop()可以得到dcba Push(a), Push(b),Push(c), Pop(), Pop( ), Pop( ) , Push(d),Pop()可以得到cbad Push(a), Push(b), Pop(),Pop( ), Push(c), Pop( ) , Push(d), Pop()可

3、以得到bacd Push(a), Push(b), Pop(), Pop( ), Push(c),Push(d), Pop( ) , Pop()可以得到badc Push(a), Pop(),Push(b),Push(c),Push(d), Pop( ), Pop( ) , Pop()可以得到adcb Push(a), Pop(),Push(b),Push(c), Pop( ), Pop( ) , Push(d), Pop()可以得到acbd Push(a), Pop(),Push(b), Pop( ), Push(c), Pop( ) , Push(d), Pop()可以得到abcd Pus

4、h(a), Pop(),Push(b), Pop( ), Push(c), Push(d), Pop( ) , Pop()可以得到abdc分别借助顺序栈和链栈,将单链表倒置。解:顺序表: #include stdio.h#define DataType char#define sqstack_maxsize 40typedef struct sqstack DataType datasqstack_maxsize;int top; SqStackTp;int InitStack(SqStackTp *sq) sq-top=0; return(1);int Push(SqStackTp *sq,

5、DataType x)if(sq-top=sqstack_maxsize-1) printf(栈满); return(0);else sq-top+; sq-datasq-top=x; return(1);int Pop(SqStackTp *sq,DataType *x)if (sq-top=0) printf(下溢); return(0);else *x=sq-datasq-top; sq-top-; return(1);int EmptyStack(SqStackTp *sq)if (sq-top=0)return(1);else return(0);/*主函数*/void main()

6、 SqStackTp sq;DataType ch;InitStack(&sq);for (ch=A;chdata=x;p-next=*ls;*ls=p;int Pop(LStackTp *ls,datatype *x) LStackTp p;if(*ls)!=NULL) p=*ls;*x=p-data;*ls=(*ls)-next;free(p);return(1); else return(0);int EmptyStack(LStackTp ls)if(ls=NULL) return(1);else return(0);void main() LStackTp ls;datatype c

7、h;InitStack(ls);for (ch=A;chdata);printf(n);while(!EmptyStack(ls) Pop(&ls,&ch);printf(%c,ch); printf(n); 有两个栈A,B这两个栈中分别存储这一个升序数列,现要求编写算法把这两个栈中的数合成一个升序队列解:link merge(link a,link b) link h,s,m,n,t; h=(cnode *)malloc(sizeof(cnode); h-next=NULL; s=h; m=a; n=b; while(m-next&n-next) if(m-next-datanext-dat

8、a) t=m-next; m-next=t-next; t-next=s-next; s-next=t; s=t; else if(m-next-data=n-next-data) t=m-next; m-next=t-next; n=n-next; t-next=s-next; s-next=t; s=t; else t=n-next; n-next=t-next; t-next=s-next; s-next=t; s=t; while(m-next) t=m-next; m-next=t-next; t-next=s-next; s-next=t; s=t; while(n-next) t

9、=n-next; n-next=t-next; t-next=s-next; s-next=t; s=t; free(m); free(n); return h;4 设两个栈共享一个数组空间,其类型定义见节,试写出两个栈公用的读栈顶元算法elemtp top_dustack(dustacktp ds,p;int i);进栈操作算法void push_dustack(dustacktp ds,p;int i , elemtp x);及出栈算法 elemtp pop_ dustack(dustacktp ds,p;int i )。其中i的取值是1或2,用以指示栈号。解:读栈顶元函数 elemtp

10、top_sqstack(s:sqstacktp) if( s.top=0) return(null); elsereturn(s.elems.top); 进栈操作 void push_sqstack(sqstacktp s,elemtp x) 若栈s未满,将元素x压入栈中;否则,栈的状态不变并给出出错信息 if(s.top=maxsize) printf(“Overflow”); else s.top+; 栈顶指针加1 s.elems.top=x x进栈 出栈函数 elemtp pop_sqstack(sqstacktp s) 若栈s不空,则删去栈顶元素并返回元素值,否则返回空元素NULL i

11、f(s.top=0) return(null); else s.top-; 栈顶指针减1 teturn(s.elems.top+1); 返回原栈顶元素值 5假设以数组sequ(0.m-1)存放循环队列元素,同时设变量rear和quelen分别指示循环队列中队尾元素和内含元素的个数。试给出此循环队列的队满条件,并写出相应的入队列和出队列的算法(在出队列的算法中要返回队头元素)。解:队满的条件 (sq.rear+1) MOD maxsize=sq.front 入队列操作 void en_cqueue(cqueuetp cq,elemtp x) 若循环队列cq未满,插入x为新的队尾元素;否则队列状态

12、不变并给出错误信息 if (cq.rear+1) MOD maxsize=cq.front) printf(“Overflow”); else cq.rear=(cq.rear+1) MOD maxsize; cq.elemcq.rear=x 出队列函数 elemtp dl_cqueue(VAR cq:cqueuetp) 若循环队列cq不空,则删去队头元素并返回元素值;否则返回空元素NULL if( cq.front=cq.rear) return(NULL); else cq.front=(cq.front+1) MOD maxsize; return(cq.elemcq.front); 6 假设以带头结点的环形链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的初始化队列、入队列、出队列的算法。解:初始化: void init_lqueue( lqueuetp lq) 设置一个空的链队列lq new(lq.front); lq.front-next:=NIL; lq.rear=lq.front; 入队列操作: PROC en_lqueue(V

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

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