网站大量收购闲置独家精品文档,联系QQ:2885784924

数据结构栈与队列详解.ppt

  1. 1、本文档共58页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构---第三章 栈和队列 * 例2. Hanoi塔问题 P55-3.5 void hanoi (int n, char x, char y, char z ) { if (n==1) move (x, 1, z); //出口条件:将编号1的圆盘从x移到z else { hanoi(n-1, x, z, y); //将n-1个圆盘从x移到y上,z为辅助塔座 move (x,n,z); //将编号n的圆盘从x移到z hanoi (n-1, y, x, z); //将n-1个圆盘从y移到z上,x为辅助塔座 } }//hanoi x y z 源 辅助 目标 数据结构---第三章 栈和队列 * void hanoi(3,a,b,c) { if 3==1 move(a,1,c) else { hanoi(2,a,c,b); move(a,3,c); hanoi(2,b,a,c); } } void hanoi(2,a,c,b) { if 2==1 move(a,1,b) else { hanoi(1,a,b,c); move(a,2,b); hanoi(1,c,a,b) } } void hanoi(1,a,b,c) { if 1==1 move(a,1,c) ; else {……} } void hanoi(1,c,a,b) { if 1==1 move(c,1,b) ; else {…… } } void hanoi(2,b,a,c) { if 2==1 move(b,1,c) else { hanoi(1,b,c,a); move(b,2,c); hanoi(1,a,b,c); } } void hanoi(1,b,c,a) { if 1==1 move(b,1,a) ; else {…… } } void hanoi(1,a,b,c) { if 1==1 move(a,1,c) ; else {…… } } a b c 数据结构---第三章 栈和队列 * [递归算法的实现原理] 1 2 3 s 1 2 3 - 利用栈,栈中每个元素称为工作记录,分成三个部分: 返回地址 实在参数表(变参和值参) 局部变量 - 发生调用时,保护现场,即当前的工作记录入栈,然后 转入被调用的过程 - 一个调用结束时,恢复现场,即若栈不空,则退栈,从 退出的返回地址处继续执行下去 代码区 静态数据区 动态数据区 数据结构---第三章 栈和队列 * [递归时系统工作原理示例] int Factorial( int n) { L1: if ( n==0 ) L2: return 1; L3: else return n*Factorial(n-1); L4: } //Factorial void main(void) { …… L0: N=Factorial(3); …… } //main 返回地址 n Factorial N L0 3 / / L3 3 / L3 2 / L3 1 / 1 1 2 6 数据结构---第三章 栈和队列 * [递归算法的用途] 求解递归定义的数学函数 在以递归方式定义的数据结构上的运算/操作 可用递归方式描述的解决过程 [递归算法的特点] 递归算法简单明了,直观易懂 时间效率低,空间开销大,算法不易优化 数据结构---第三章 栈和队列 * [递归转换为非递归的方法] 1)采用迭代算法 递归—从顶到底 迭代—从底到顶

文档评论(0)

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

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

1亿VIP精品文档

相关文档