队列循环-队列.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
106队列循环队列

数据结构与算法 Chapter6 队列(Queue) 本章教学内容 6.1 队列结构特性 6.2 抽象数据类型 6.3 公式化描述(顺序队列) 6.4 链表描述(链队列) 6.5 应用 1. 火车车厢重排 课堂练习 6.2 队列的抽象数据类型描述 ADT Queue { 实例 有序线性表,一端称为front,一端称为rear 操作 Create( ); //创建一个空的队列 IsEmpty( ); //如果队列为空,返回true,否则返回false IsFull( ); //如果队列满,返回true,否则返回false First( ); //返回队列中的第一个元素 Last( ); //返回队列中的最后一个元素 Add(x); //向队列添加元素x Delete(x); //删除队首元素,并将它传递给x } 队列的两种描述形式 队列的物理存储可以用: 顺序存储结构 链式存储结构 6.3 队列的公式化描述(顺序存储结构) 1、顺序队列的基本操作 公式化描述-1 location( i ) = i – 1; front=0,rear为最后一个元素的位置 length = rear+1; 插入耗时Θ(1),删除耗时Θ(n) ,移动元素! 公式化描述-2 location( i ) = location(1) +i– 1; front = location(1),rear = location(最后一个元素) length = rear-front+1; 插入耗时O(n), 删除耗时Θ(1) 2、“假溢出”问题 解决“假溢出”的方法 3、循环队列 循环队列的特点 4、循环队列的操作 循环队列类Queue(程序6-1) -操作1-创建空队列 -操作2-返回队列中的第一个元素 -操作3-返回队列中的最后一个元素 -操作4-入队列(插入) 操作5-出队列(删除) 课堂练习 6.4 队列的链表描述(链队列) 两种链表队列的比较 链队列:操作示例 链式队列类的定义 -操作1-析构函数 -操作2-判断队列是否已满 -操作3-返回队列中的第一个元素 -操作4-返回队列中的最后一个元素 -操作5-向队列添加元素x -操作6-删除第一个元素x 6.5 队列应用-火车车厢重排 车厢分配到缓冲轨道的规则 车厢C应该移动到这样的铁轨: 该缓冲铁轨中现有的各车厢的编号均小于C; 如果有多个缓冲铁轨满足这样的条件,则选择一个尾部车厢编号最大的缓冲铁轨,否则选择一个空的缓冲铁轨【如果有的话】 算法1:使用队列,程序6-7 算法2:不使用队列,程序6-8 简化版:如果只需简单输出车厢重排移动顺序 只需了解:每个缓冲铁轨的最后一个成员是谁?以及每节车厢当前位于那个缓冲铁轨? 引入两个数组: last[1..k],表示每个缓冲铁轨中最后一个车厢的编号 track[1..n],表示每个车厢所在的缓冲铁轨编号 简化:车厢从缓冲轨道移出轨 下一个出轨的车厢编号,与当前缓冲轨道中最后一个车厢编号相同? 课后练习:键盘缓冲区 当程序正在执行其它任务时,用户可以从键盘上不断键入所要输入的内容。 系统在利用这种分时处理方法时,用户键入的内容不能在屏幕上立刻显示出来,直到当前正在工作的那个进程结束为止。 但在这个进程执行时,系统是在不断地检查键盘状态,如果检测到用户键入了一个新的字符,就立刻把它存到系统缓冲区中,然后继续运行原来的进程。当当前工作的进程结束后,系统就从缓冲区中取出键入的字符,并按要求进行处理。 键盘缓冲区的简单模拟 要求:使用循环队列 定义一个类:实现两个基本函数 Input:接受一个输入键,不显示,直接送入键盘缓冲区 Output:从缓冲区中取出一个键,显示在屏幕上 测试:轮流调用两个接口 使用_getch ()函数不显示输入! templateclass T LinkedQueueT::~LinkedQueue ( ) { //析构函数,删除全部节点 NodeT * next; while(front) { next = front-next; delete front; front = next; } } O(n) templateclass T bool LinkedQueueT ::IsFull( ) const { //判断队列是否已满 NodeT * p; try { p = new NodeT; delete p; return false; } catch(NoMem) { return true; } } templateclass T T LinkedQueueT ::First( ) cons

文档评论(0)

rabbitco + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:8126037011000004

1亿VIP精品文档

相关文档