数据结构与算法 第3章 栈和队列课件.pptVIP

数据结构与算法 第3章 栈和队列课件.ppt

  1. 1、本文档共68页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构与算法 第3章 栈和队列课件

栈和队列是两种常用的数据类型;*;*;*;练习题;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;则 检验括号是否匹配可用栈来实现。;*;*;算法基于原理: N = (N div d)×d + N mod d;数制转换算法 void Conversion(int N) /*对任意非负十进制数N,打印等值的八进制数*/ { Stack S; int x; /*S为顺序栈或链栈*/ InitStack(S); while(N0) { x=N%8; Push(S, x); N=N/8; } while(!IsEmpty(S)) { Pop(S,x); printf(“%d”,x); } };*;*;*;*; 当在一个函数的运行期间调用另一个函数时, 在运行该被调用函数之前, 需先完成三项任务:; 从被调用函数返回调用函数之前, 应该完成下列三项任务:;多个函数嵌套调用的规则是:;递归工作栈:递归函数执行过程中占用的数据区 工 作 记 录: 每一层的参数、局部变量、返回地 址等构成的记录(数据区) 当前活动记录:栈顶工作记录(当???函数数据区) 当前环境指针:递归工作栈的栈顶指针,指向当前 活动记录。(指示当前函数数据区);例Hanoi塔问题:有3个塔座x, y, z, 在塔座x上插有n个大小不同的圆盘, 从小到大且自上而下编号为1,2,…n; 按规则将它们一个个搬到塔座z上, y可用作辅助塔座。 规则为: (1) 每次只能移动一个圆盘; (2) 圆盘可放在任意塔座上; (3)任何时刻塔座上都不得将大盘压在小盘之上。;void hanoi (int n; char x, char y,char z) /* 将塔座x上按直径由小到大且至上而下编号为1至n的 n个圆盘按规则搬到塔座z上,y可用作辅助塔座。*/ 1 { 2 IF (n==1) 3 move(x, 1, z); /*将1号盘从x移到z*/ 9 } ;void hanoi (int n; char x, char y,char z) 1 { 2 IF (n==1) 3 move(x, 1, z); 4 ELSE { hanoi(n-1, x, z, y); move(x, n, z); hanoi(n-1, y, x, z); 8 } } 调用程序:返回地址为0 hanoi(3, A, B, C); 0 . . . . . .;; 递归程序结构清晰、程序可读性强,且其正确性易于证明,给用户编程带来很大方便。;*;*;*;*;;*;*;*;*; 尽管链队列使用方便,但由于其指针多占存储空间,有时仍需要用顺序结构来表示队列。 ;存储结构定义;*; 当 sq.rearmaxsize 时, 队列满 (即上溢), 但此时头指针指示的元素之前可能还有空单元, 此现象称为假溢出; ;*;*;二、循环队列“空”与“满”的判定;*;*;*;队列的应用举例:;*;void yhsj(int h) { SeqQueue q; QueueElementType e,s; InitQueue(q); EnterQueue(q,0); EnterQueue(q,1); EnterQueue(q,0); for(int i=1;ih;i++){ do{ DeleteQueue(q,s); GetHead(q,e); if (e!=0) printf(%d ,e); else printf(\n); EnterQueue(q,s+e); }while (e!=0); EnterQueue(q,e); } while(!IsEmpty(q)){ DeleteQueue(q,s); if (s!=0) printf(%d ,s)

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档