- 1、本文档共95页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 数字图像处理实验报告 (图像编码).doc
- 数字图像处理_第六章_色彩模型与彩色处理.ppt
- 数字图像处理实验手册.doc
- 数字图像处理实验指导书(2014.10.13).doc
- 数字图像处理实验指导书(2015.11.04).doc
- 数字图像处理技术应用课程报告.doc
- 数字图像处理期末考题.doc
- 数字图像处理模拟题(双语课).doc
- 数字图像处理模拟试卷及答案.doc
- 数字图像处理教程(matlab版).ppt
- 2023-2024学年湖南省湘西州高一下期末数学试卷附答案解析.docx
- 2023-2024学年四川省凉山州高一下期末数学试卷附答案解析.docx
- 2023-2024学年山东省日照市高一下期末数学试卷附答案解析.docx
- 2023-2024学年河北省张家口市高一下期末数学试卷附答案解析.docx
- 2023-2024学年山东省枣庄市高一下期末数学试卷附答案解析.docx
- 2023-2024学年四川省成都市高一下期末数学试卷附答案解析.docx
- 2023-2024学年四川省成都七中高一下期末数学试卷附答案解析.docx
- 2023-2024学年陕西省咸阳市高一下期末数学试卷附答案解析.docx
- 2023-2024学年山东省泰安市高一下期末数学试卷附答案解析.docx
- 黑龙江省哈尔滨市九中2024-2025年4月考试高二语文试卷.docx
文档评论(0)