2.向量、栈和队列b.ppt

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

目标 了解递归方法 理解递归的栈实现 熟悉队列概念和基本操作 掌握队列的实现及其应用 递归与栈 递归:用自身的简单情况来定义自己的方式 较大规模的问题可以用较小规模的子问题描述 递归出口:递归的终结定义 存在可直接求解的最小子问题 递归与栈 Hanoi塔问题 传说古代印度婆罗门庙里有一个塔台,台上有3根用钻石做成的柱子A,B,C。在A柱上放着64个金盘,每一个都比下面的略小一点。把A柱上的金盘全部移到C柱上的那一天就是世界的末日。 移动规则:一次只能移动一个金盘;移动过程中大盘不能放在小盘上面。 这种移动一共要进行264-1次,如果每秒移动一次,需要5000多亿年。 Hanoi塔问题 Hanoi塔问题 问题分解: 第1个子问题是把n-1个盘子从A柱移到B柱,这其实是一个n-1阶的汉诺塔问题; 第2个子问题是把最大的盘子从A柱移到C柱; 第3个子问题是把n-1个盘子从B柱移到C柱,这也是一个n-1阶的汉诺塔问题。 Hanoi塔问题 Hanoi塔问题 递归过程的实现 递归的计算机实现要解决两个关键问题: 调用子过程 返回子过程结果 调用子过程: 保存调用信息(实参、返回地址、局部变量) 分配被调过程数据区 把控制转移到被调过程的入口 返回子过程结果: 保存返回信息(计算结果) 释放被调过程的数据区 把控制按返回地址转移到调用过程中去 递归过程的实现 递归过程的实现 递归过程的实现 递归效率分析 递归方程求解-Hanoi塔 递归效率分析 递归效率分析 递归树方法-Hanoi塔 想一想? 生活中的队列应用 银行排队存取款,“先到先服务” 。 杂货店商品放置原则:新商品-后排。 乘坐公共汽车,应该在车站排队,车来后,按顺序上车。 计算机中的队列应用 队列在程序设计中的一个典型应用例子是作业排队问题。 例,在一个局域网上有一台共享的网络打印机. 队列 队列也是一种操作受限的线性表,规定 插入在表的一端(队尾rear), 删除在队的另一端(队头front), 队列又称为先进先出表(FIFO). 队列数据 队列操作 初始化队列 入队 出队 判空 判满 显示队列 队列实践作业 写一个队列测试主函数 根据键入的数字,实现如下选项功能 1. 建队 2. 入队 3. 出队 4. 显示 5. 退出 优先队列 优先队列特点 入队操作: 在队尾插入(与队列相同); 出队操作: 在队列中找到优先级最高的元素,然后出队. 应用:(实时)操作系统作业调度 应用:堆排序 优先队列-出队 栈与队列综合应用-球钟 球钟(Ball Clock)是一个利用球的移动来记录时间的简单装置。它有三个可以容纳若干个球的指示器:分钟指示器,五分钟指示器,小时指示器。若分钟指示器中有3个球,五分钟指示器中有7个球,小时指示器中有8个球,则时间为8:38。 球钟 球钟工作原理 分钟指示器最多可容纳4个球.每过1分钟,球钟从球队列队首取出1个球放入分钟指示器,当放入第五个球时,在分钟指示器的4个球会按相反方向返回球队列的队尾,而第五个球就会进入五分钟指示器. 按此类推,五分钟指示器最多可放11个球,小时指示器最多可放11个球. 当小时指示器放入第12个球时,原来的11个球返回球队列的队尾,然后第12个球也回到队尾.这时,三个指示器均为空,回到初始状态,从而形成一个循环.因此,球钟表示时间的范围是从0:00到11:59. 球钟问题 现设初始时球队列的球数为x(27≤x≤127),球钟的三个指示器初态均为空。问要经过多少天(每天24小时),球钟的球队列才能回复原来的顺序? 编写计算x个球需要多少天的算法(函数)。 测试程序:从键盘输入球数x,答案用整数形式输出到屏幕。 球钟问题 数据结构 3个栈:分钟,五分钟,小时 1个队列:剩余球队列 球钟问题 球钟问题 球钟问题 球钟问题 本章小结-顺序表 表、栈、队列是三种最基本的数据结构 广泛用途:调度、表达式求值、数制转换、递归实现等等。 本章小结-顺序表 表、栈、队列是三种最基本的数据结构 广泛用途:调度、表达式求值、数制转换、递归实现等等。 本章小结-顺序表 表、栈、队列是三种最基本的数据结构 广泛用途:调度、表达式求值、数制转换、递归实现等等。 本章小结-顺序表 数据结构定义 typedef struct{ … }List; 数据基本操作 表:创建空表,插入,删除,显示 栈:创建空栈,入栈,出栈,取栈顶元素,显示 队列:创建空队列,入队,出队,取队首元素,显示 主程序main 问题的算法实现,涉及调用基本操作(测试) 演示 注:下周一实践上机时间,16306 ElemType dePQueue(Queue *Q){ //出队 if (!isEmpty(Q)){ int i,

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档