数据结构与C++算法设计案例教程赖俊峰模块四课件教学.pptVIP

数据结构与C++算法设计案例教程赖俊峰模块四课件教学.ppt

  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文档。上传文档
查看更多
数据结构与C++算法设计案例教程赖俊峰模块四课件教学.ppt

模块四 栈和队列 本模块要点: 1、理解栈的定义和特点。 2、掌握入栈、出栈、判断栈空、栈满的算法。 3、理解队列的定义和特点。 4、掌握入队、出队、判断队空、队满的算法。 5、循环队列的定义和操作 任务一 栈的概念和基本操作 子任务1 栈的概念 栈(stack)是限制在一端进行插入和删除的线性表。允许进行插入、删除操作的这一端称为栈顶;另一端不作任何操作,称为栈底,。如果没有一个元素则称为空栈。 如图所示的栈中有a1、a2、a3、a4这四个元素。在建立这个栈时,它们进栈的顺序是a1、a2、a3、a4;当需要出栈时,则只能按照a1、a2、a3、a4的顺序进行出栈,所以栈被称为“后进先出”的线性表(Last In First Out),简称 LIFO表。 栈基本操作 (1)创建栈:StaCreat() 初始条件:栈不存在 操作结果:构造了一个空栈。 (2)删除一个栈:StaDestroy() 初始条件:栈存在 操作结果:把整个栈删除。 (3)显示栈顶元素GetTop() 初始条件:栈不为空 操作结果:现实栈顶元素的值。 (4)入栈操作: Push(StackElem e) 初始条件:栈s已存在 操作结果:在栈s的顶部插入一个新元素x,x成为新的栈顶元素。栈发生变化。 (5)出栈操作:Pop(); 初始条件:栈s存在且非空 操作结果:栈s的顶部元素从栈中删除,栈中少了一个元素。栈发生变化。 (6)显示栈中元素个数:StaLength() 初始条件:栈已存在 操作结果:显示栈中元素个数,并提示还可以有几个元素入栈。 (7)判断栈是否为空:StaEmpty() 初始条件:栈已存在 操作结果:若栈为空栈,并输出结果 (8)判断栈是否为满:StackFull() 初始条件:栈已存在 操作结果:若栈中元素的个数已经达到最大值,并输出结果。 子任务2 栈的主要操作 栈中的数据元素用一个预设的足够长度的一维链表来实现,栈底位置可以设置在链表的一个端点,而栈顶则是另一端,它可以随着插入和删除而变化,我们用用top 指针来指向栈顶。定义一个指向顺序栈的指针: StackElem* Top; 通常0下标端设为栈底,这样空栈时栈顶指针top=-1; 入栈时,栈顶指针加1,即top++; 出栈时,栈顶指针减1,即top--。栈操作的示意图如图4-2所示。 知识扩展 子任务3 栈的应用 问题:这是实验心理学中的一个经典问题,心理学家把一只老鼠从一个无顶盖的大盒子的入口处赶进迷宫。迷宫中设置很多隔壁,对前进方向形成了多处障碍,心理学家在迷宫的唯一出口处放置了一块奶酪,吸引老鼠在迷宫中寻找通路以到达出口。 求解思想:回溯法是一种不断试探且及时纠正错误的搜索方法。下面的求解过程采用回溯法。从入口出发,按某一方向向前探索,若能走通(未走过的),即某处可以到达,则到达新点,否则试探下一方向 ; 若所有的方向均没有通路,则沿原路返回前一点,换下一个方向再继续试探,直到所有可能的通路都探索到,或找到一条通路,或无路可走又返回到入口点。 任务二 队列的概念和操作 子任务1 队列的概念 队列的主要特性是“先进先出”。它有一端只能进行插入操作,另一端只能进行删除操作。最先进入队列的元素一定最先出队列,最后进入队列的元素一定放在队尾。 我们把这种“先进先出”(FIFO---First In First Out) 的数据结构:即插入在表一端进行,而删除在表的另一端进行的数据结构称为队列,把允许插入的一端叫队尾(rear) ,把允许删除的一端叫队头(front)。如图4-3所示是一个有4个元素的队列。如果它们入队的顺序为a1、a2、a3、a4那么它们出队时的顺序是a1、a2、a3、a4 。 队列的基本操作 (1)创建队列,建立一个QueueElem的对象为首元素: QueCreat(): 初始条件:队列不存在。 操作结果:构造了一个有一个元素的队列。 (2)删除一个队列:QueueDestroy() 初始条件:队列存在。 操作结果:把队列中的所有元素删除。 (3)入队操作:QueAdd(QueueElem e) 初始条件:队列不为空。 操作结果:向队尾插入元素e。 (4)出队操作QueueSub() 初始条件:队列已经存在。 操作结果:让队列头部的元素出队列。 (5)显示队列中元素的个数:QueueLength() 初始条件:队列已经存在且非空。 操作结果:显示对中元素的个数,提示还有几个元素可以入队。 (6)判断队列是否为满:QueueFull() 初始条件:队列已经存在 操作结果:如果队列没有满则返回“1”,说明还有元

文档评论(0)

带头大哥 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档