网站大量收购独家精品文档,联系QQ:2885784924
  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SDS03C

第三章 栈和队列 3.1 栈 栈的抽象数据类型定义 ADT Stack { 数据对象:D={ ai | ai?ElemSet, i=1, 2, ..., n, n?0 } 数据关系:R1={ai-1, ai | ai-1, ai?D, i=2, ..., n } 约定an 端为栈顶,a1 端为栈底。 基本操作: InitStack(S) 操作结果:构造一个空栈 S。 DestroyStack(S) 初始条件:栈 S 已存在。 操作结果:栈 S 被销毁。 3.2 栈的应用举例 ——表达式求值 3.3 栈与递归 的实现 3.4 队列 队列的抽象数据类型定义 ADT Queue { 数据对象:D={ ai | ai?ElemSet, i=1, 2, ..., n, n?0 } 数据关系:R1={ai-1, ai | ai-1, ai?D, i=2, ..., n } 约定 a1 端为队列头,an 端为队列尾。 基本操作: InitQueue(Q) 操作结果:构造一个空队列 Q。 DestroyQueue(Q) 初始条件:队列 Q 已存在。 操作结果:队列 Q 被销毁,不再存在。 多个函数嵌套调用的规则是: 此时的数据区管理实行 “栈式管理”。 后调用先返回。 例如: void main( ) void a( ) void b( ) { … { … { … a( ); b( ); … … … … }//main }// a }// b 递归函数的执行过程可看作是同一函数进行嵌套调用,其数据区管理同样实行“栈式管理”。 函数数据区的栈式管理依照下列原则进行:调用时进栈,返回时退栈,函数本次运行所使用的数据区总在当前栈顶。 在进行递归调用时,前一次调用尚未完成,所占用的数据区不能释放。因此,每递归调用一次都要重新分配数据区——进栈,当递归结束返回时,才能逐级释放其数据区——退栈。 函数数据区的栈式管理 递归与归纳思维方法 数学归纳法: 欲证明一个关于自然数 n 的命题是正确的, 只要完成以下两步: 对于最简单的情形,如 n=1,证明命题正确; 设 n≤k 时命题正确,由此推导出 n=k+1 时命题正确。 例:1+2+ ? + n=(1+ n)n/2 递归算法的检验方法: 验证算法对于最简单的情形能否正确处理; 检验算法的其它执行路径,当遇到递归调用时,可大胆假设该递归调用能按规格说明所述完成相应的子任务,在此基础上继续检验,看其是否实现了规格说明规定的功能。 int fact( int n ) { // 计算n!, n≥0 if (n==0) return 1; // 递归出口 else return n*fact(n-1); }//fact 例: 递归与归纳思维方法 例: 将一个以 . 结束而长度少一的字符串按倒序输出 void revers() { // 将一个以 . 结束的字符串按倒序输出 char ch; ch = getchar(); if (ch != .) revers(); putchar(ch); }//revers 例3-2:n 阶 Hanoi 塔问题 假设有3 个分别命名为X, Y 和Z 的塔座,在塔座X 上插有n 个直径大小各不相同、从小到大编号为1, 2, ...,n 的圆盘,小盘在上、大盘在下、呈一塔形。现要求将塔座X 上的n 个圆盘移至塔座Z 上并仍按同样顺序叠放,移动圆盘时必须遵循下列规则: (1) 每次只能移动一个圆盘; (2) 圆盘可以插在X, Y和Z中的任一塔座上; (3) 任何时刻都不能将一个较大的圆盘压在较小的圆盘之上。 void hanoi( int n, char x, char y, char z ) //将塔座x上按直径由小到大且自上而下编号为1至n //的n个圆盘按规则搬到塔座z上,y用作辅助塔座 { if (n==1) move(x, 1, z); //将编号为1的圆盘从x移到z else {

文档评论(0)

cj80011 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档