第三章-栈和队列 1.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文档。上传文档
查看更多
第三章-栈和队列 1.ppt

第三章 栈和队列 [内容提要] 1.栈和队列的概念 2.栈和队列的存储结构及它们的应用 3.栈和队列与线性表有着密切的联系 栈的示例图 栈的顺序存储结构(顺序栈) 顺序栈:是利用一组地址连续的存储单元依次存放从栈底到栈顶的数据元素,通常用一维数组存放栈的元素。设“指针”top指示栈顶元素的当前位置或后一空位置(下标)。 顺序栈的几种情况 栈与函数调用 地图四染色问题 “四染色”定理:可以用不多于四色对地图着色,使相邻的地区不重色。 算法思想 :“回溯”法 从第一号地区开始逐一染色,每一个地区逐次用色数1、2、3、4进行试探,若当前所取的色数与周围已染色的地区不重色,则用栈记下该地区的色数,否则依次用下一色数进行试探;若出现用1..4色均与相邻地区发生重色,则需退栈回溯,修改当前栈顶的色数。 定义:队列是限定只能在表的一端进行插入,在表的另一端进行删除的线性表 队尾(rear)——允许插入的一端 队头(front)——允许删除的一端 队列特点:先进先出(FIFO)或后进后出(LILO) 队列的顺序存储结构 定义:队列的顺序存储结构,简称顺序队列,它是由一个存放队列中元素的一维数组,及分别指示队头和队尾的“指针”所组成。 顺序队列的类型定义: #define maxsize 100 typedef struct {elemtp elem[maxsize]; int rear,front; }squeuetp 顺序队列的几种状态 循环队列的引入 顺序队列存在的问题 设数组维数为M,则: 当front=-1,rear=M-1时,再有元素入队发生溢出——真溢出 当front?-1,rear=M-1时,再有元素入队发生溢出——假溢出 解决方案——循环队列 基本思想:把队列设想成环形,让sq[0]接在sq[M-1] 之后,若rear+1==M,则令rear=0; 实现:利用“模”运算 入队: rear=(rear+1)%M; sq[rear]=x; 出队: front=(front+1)%M; x=sq[front]; 新问题:队满、队空判定条件 在循环队列上实现的操作 队列的初始化操作 判队空函数 求队长度函数 读队头元素函数 入队列操作函数 出队列函数 队列的链式存储结构 定义:队列的链式存储结构,简称链队列,它实际上是一个同时带有头指针和尾指针的单链表,头指针指向头结点,尾指针指向队尾结点 在链队列上实现的操作 初始化操作的实现 判队空函数 求队长度函数 读队头元素函数 入队列操作 出队列操作 在链队列上操作的注意事项 (1)和链栈类似,无须考虑判队满的运算及上溢。 (2)在出队算法中,一般只需修改队头指针。但当原队中只有一个结点时,该结点既是队头也是队尾,故删去此结点时亦需修改尾指针,且删去此结点后队列变空。 (3)和链栈情况相同,对于链队列,一般不会产生队列满。队列的长度变化一般比较大,一般用链式存储结构比顺序存储结构更有利。 队列的应用--舞伴问题 模拟打印队列的管理 设计算机中有一个缓冲区用来保存打印队列,所有的打印任务按先后顺序进入此队列 这是一个典型的离散事件模拟,需要模拟出每个打印任务的开始时间和打印时间, 可以把一个任务的开始打印或打印完成这两个时刻称为“事件”那么整个模拟程序会按时间发生的 先后顺序进行处理。我们可以把“事件”存放在一个 队列中,那么可以用一个循环一次“触发”这些事件,在每一个“开始打印”事件发生后我们应该显示出任 务编号和开始时间,在每一个“打印结束”事件发生 后我们应该显示出此任务的打印时间。 模拟打印队列的管理算法 流程图 第三章 栈和队列 [内容提要] 1.栈和队列的概念 2.栈和队列的存储结构及它们的应用 3.栈和队列与线性表有着密切的联系 学习要点 1、掌握栈和队列这两种数据结构的特点,了解在什么问题中应该使用哪种结构。 2、熟悉栈(队列)和线性表的关系;顺序栈(顺序队列)和顺序表的关系;链栈(链队列)和链表的关系。 3、重点掌握在顺序栈和链栈上实现的栈的七种基本运算,特别注意栈满和栈空的条件及它们的描述。 4、重点掌握在循环队列和链队列上实现的七种基本运算,特别注意队满和队空的描述方法。 5、熟悉栈和队列的下溢和上溢的概念;顺序队列中产生假上溢的原因;循环队列消除假上溢的方法。 Y Y 事件队列为空 是开始事件 执行开始打印事件 执行打印结束事件 N 结束 N * * 定义:栈(Stack) 是限制仅在表的一端进行插入和

文档评论(0)

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

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

版权声明书
用户编号:8073070133000003

1亿VIP精品文档

相关文档