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

数据结构与STL_第3章_栈队列串.ppt

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

* 《数据结构与STL》 * 函数递归 递归调用形式 int fun (int x) { … y= fun(a);//调用自身 … } int fun1(int x) { … y= fun2(a); … } int fun2(int x) { … k=fun1(b); … } -*- 递归 递归的两个要素 1 边界条件 确定递归何时终止,也称为递归出口 2 递归模式 大问题如何分解为小问题 《数据结构与STL》 * 经典的递归调用举例 正整数阶乘 int factorial( int n) { int fn if(!n) fn = 1; else fn = n*factorial(n-1); return fn; } 《数据结构与STL》 * 斐波那契(Fibonacci)数列 F(n)=F(n-1)+F(n-2), F(1)=1, F(2)=1, n≥3 int fibonacci ( int n) { int fn if (1 == n || 2 == n) fn = 1; else fn = fibonacci(n-1) + fibonacci(n-2); return fn; } 《数据结构与STL》 * 汉诺塔问题 传说远东地区有一座庙,僧人要把64个大小不同的盘子从第一个柱子(A)移到第三个柱子(C),这64个盘子从上至下逐渐增大,如图所示。僧人移动盘子的规则是: 每次只能移动一个盘子; 柱子上任何时候都要保持大盘在下,小盘在上的放置方式; 移动过程中,可以借助于第二个柱子(B),暂时放置盘子。 据传说,僧人们完成这个任务时,世界的末日就来临了。十九世纪法国数学家鲁卡斯指出,完成这个任务,僧人们移动盘子的总次数为:264-1。假设一秒钟移动一个,每天24小时不停地移动,大约需要5800亿年。 《数据结构与STL》 * 汉诺塔问题的递归思路: 移动n个盘子可以利用递归降解为移动n-1个盘子来实现 1.如果n=1,则盘子直接从A柱到C柱:A--C;执行步骤3;否则执行步骤2。 2.如果n1,则将盘子分成最大的1个和其它(n-1)个,先把(n-1)个盘子移到B柱上,再把最大的盘直接移到C柱上,然后把B柱上的n-1个盘移到C柱上。即: 2.1 将A柱上(n-1)个盘子:借助C柱,由A柱移到B柱:hanoi(n-1,A,C,B); 2.2 将最大的一个盘子由A柱移到C柱:move(A,n,C); 2.3 再将B柱上(n-1)个盘子借助A柱移到C柱上:hanoi(n-1,B,A,C)。 3.结束。 -*- 汉诺塔问题 void hanoi(int n,char A,char B,char C) { if (n==1) move(A,1,C); else { hanoi(n-1, A, C, B); move (A, n, C); hanoi(n-1, B, A, C); } } A B C 源塔 目标塔 辅助塔 《数据结构与STL》 * 3.4.2优先级队列的调度 计算机网络中的网络连接设备: 路由器,交换机,… 缓冲队列: 如何保证业务的服务质量(Qos)? 《数据结构与STL》 * 解决方案 为每个数据包设置优先级 为不同的优先级设置不同的队列 使用同一队列——优先级队列(priority queue) 显然只能使用链队列 《数据结构与STL》 * 优先级队列在实现时有两个关键问题: (1)如何根据元素的优先级快速找到新元素需要插入的位置; (2)如何将新元素快速插入到队列中。 最后结点指针数组 template class T struct PriorityNode //定义结点结构 { short priority; //优先级 T data; //数据域 struct PriorityNode T * next; //指针域 }; 《数据结构与STL》 * //定义优先级别数目 #define PRIORITY_NUMBER 10 template class T class PriorityQueue //定义优先级队列类 { public: PriorityQueue(); //构造函数 ~PriorityQueue(); //析构函数 void P

文档评论(0)

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

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

1亿VIP精品文档

相关文档