网站大量收购独家精品文档,联系QQ:2885784924

第3章 栈和队列.pptx

  1. 1、本文档共77页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 栈和队列重庆的麻辣烫,成都的串串香。串串香吃起美味,背后的付出却艰辛,要把菜品一个一个串到一根竹签上,吃货才能一个一个吃出来。一把一把接着下锅,先下锅的先吃到。串起来是进栈,吃出去是出栈;下锅是进队列,出锅是出队列。本章讲解栈和队列。要求理解栈和队列概念;掌握栈和队列的存储结构;掌握栈和队列的基本操作;灵活应用栈和队列。提纲3.7 链队列3.8 循环队列和优先队列3.9 队列应用3.10 栈和队列学习总结3.1 栈基本概念3.2 顺序栈3.3 链栈3.4 栈应用3.5 队列基本概念3.6 顺序队列3.1 栈基本概念栈是特殊的线性表,它只允许在线性表的一端操作。如图3.1所示,装乒乓球、网球、羽毛球的盒子皆属于栈类型。能够操作的这一端叫栈顶,不能操作的另一端叫栈底。显然,栈有“先进后出”或“后进先出”的特点。3.1 栈基本概念栈的抽象数据接口IStack3.2 顺序栈以顺序存储结构进行存储的栈称为顺序栈。3.2.1 顺序栈存储结构顺序栈存储结构采用顺序存储方式,同顺序表存储结构,故顺序栈也可以用一维数组存储如图3.2所示,栈顶设置1个指针top指向栈顶元素(有的参考书将top指向栈顶元素的下1个位置,不影响理解)。3.2.1 顺序栈存储结构举例:1个经验丰富的探险队队长带领若干队员进入1个狭长的溶洞,要求后面队员手拉手紧跟着,不能单独走以免走散。队长最先进洞,一路做返回记号,出洞却最后出来。在这个例子中,溶洞看作栈,队长和队员看作元素,这是个顺序栈。3.2.2 顺序栈基本操作顺序栈类SqStack3.2.2 顺序栈基本操作长度为5的顺序栈的基本操作如图3.3所示。3.2.2 顺序栈基本操作1.栈判空和栈判满顺序栈栈判空和栈判满操作就是判断栈是否为空和是否已满。出栈时要判断栈是否为空,入栈时要判断栈是否为满,否则操作无效,增加开销。那么又如何实现的呢?我们来看看算法3.1。3.2.2 顺序栈基本操作【算法3.1】判断顺序栈是否为空和是否已满。思路:由图3.3的(1)和(3)易知,根据top的值可以判断栈空和栈满。代码见算法3.13.2.2 顺序栈基本操作2.入栈顺序栈入栈操作是指向栈中添加元素,在栈没有满的情况下。那么又如何实现的呢?我们来看看算法3.2。3.2.2 顺序栈基本操作【算法3.2】顺序栈入栈。思路:由图3.3的(2)易知,在栈未满的情况下先将top加1,再将入栈元素赋值给top处元素。代码见算法3.23.2.2 顺序栈基本操作3.出栈顺序栈出栈操作是指栈顶元素出栈,在栈没有空的情况下。那么又如何实现的呢?我们来看看算法3.3。3.2.2 顺序栈基本操作【算法3.3】顺序栈出栈。思路:由图3.3的(4)易知,先将出栈元素赋值给返回变量,再top减1。代码见算法3.33.2.2 顺序栈基本操作4.取栈顶元素顺序栈取栈顶元素操作是指访问栈顶元素但栈顶元素不出栈,在栈没有空的情况下。那么又如何实现的呢?我们来看看算法3.4。3.2.2 顺序栈基本操作【算法3.4】顺序栈取栈顶元素。思路: 由图3.3的易知,取栈顶元素只需访问top指针指向的元素,将其输出。代码见算法3.43.3 链栈以链式存储结构进行存储的栈称为链栈。3.3.1 链栈存储结构链栈存储结构采用链式存储方式,同链表存储结构。如图3.4所示,用带头节点的单链表表示链栈,链栈的栈顶指针top指向单链表的首节点,单链表的尾节点为栈底节点。3.3.2 链栈基本操作链栈节点类LinkNode描述链栈类LinkStack描述3.3.2 链栈基本操作1.栈判空链栈栈判空同顺序栈栈判空,而链栈同链表一样不存在溢出,除非内存耗尽。因此链栈出栈时要判断栈是否为空而入栈时不需要判断是否为满。3.3.2 链栈基本操作【算法3.5】判断链栈是否为空。思路:由图3.4易知,链栈为空同链表为空,此时只有头节点,top指针也指向头节点。代码见算法3.53.3.2 链栈基本操作2.入栈链栈入栈操作类似单链表插入节点操作,但只能在头节点之后即栈顶处插入。3.3.2 链栈基本操作【算法3.6】链栈入栈。思路:由图3.4易知,插入的节点插入到头节点之后;top指针指向插入节点。代码见算法3.63.3.2 链栈基本操作3.出栈链栈出栈操作类似单链表删除节点操作,在栈没有空的情况下,但只能删除首节点即栈顶节点。3.3.2 链栈基本操作【算法3.7】链栈出栈。思路:由图3.4易知,若链栈非空则删除首节点;若删除后链栈为空则将top指针指向头节点,否则将其指向下一个节点;返回删除节点的data值。若链栈为空则返回空。代码见算法3.73.3.2 链栈基本操作4.取栈顶元素链栈取栈顶元素操作同顺序栈取栈顶元素操作,在栈没有空的情况下。那么又如何实现的呢?我们来看看算法3.8。3.3.2 链栈基本操作【算法

文档评论(0)

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

人力资源管理师、教师资格证持证人

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

版权声明书
用户编号:6152114224000010
领域认证该用户于2024年03月13日上传了人力资源管理师、教师资格证

1亿VIP精品文档

相关文档