数据结构-栈和队列..pptxVIP

  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文档。上传文档
查看更多
3 栈和队列信息学院暑期培训栈和队列学习目标掌握栈和队列这两种抽象数据类型的特点,并能在相应的应用问题中正确选用它们。熟练掌握循环队列和链队列的基本操作实现算法。理解递归算法执行过程中栈的状态变化过程。重点和难点栈和队列是在程序设计中被广泛使用的两种线性数据结构,本章的学习重点是掌握这两种结构的特点,以便能在应用问题中正确使用。知识点顺序栈、链栈、循环队列、链队列栈和队列栈和队列是在程序设计中被广泛使用的两种线性数据结构。与线性表相比,它们的插入和删除操作受更多的约束和限定,故又称为限定性的线性表结构。线性表允许在表内任一位置进行插入和删除;栈只允许在表尾一端进行插入和删除;队列只允许在表尾一端进行插入,在表头一端进行删除。3 栈和队列栈在计算机的实现有多种方式:◆ 硬堆栈:利用CPU中的某些寄存器组或类似的硬件或使用内存的特殊区域来实现。这类堆栈容量有限,但速度很快;◆ 软堆栈:这类堆栈主要在内存中实现。堆栈容量可以达到很大。在实现方式上,又有动态方式和静态方式两种。 本章将讨论栈和队列的基本概念、存储结构、基本操作以及这些操作的具体实现。3.1 栈3.1.1 栈的基本概念1 栈的概念 栈(Stack):是限制在表的一端进行插入和删除操作的线性表。又称为后进先出LIFO (Last In First Out)或先进后出FILO (First In Last Out)线性表。 栈顶(Top):允许进行插入、删除操作的一端,又称为表尾。用栈顶指针(top)来指示栈顶元素。 栈底(Bottom):是固定端,又称为表头。 空栈:当表中没有元素时称为空栈。出栈(pop)进栈(push)图3-1顺序栈示意图an??topai??a2bottoma13.1.1 栈的基本概念 设栈S=(a1,a2,…an),则a1称为栈底元素,an为栈顶元素,如图3-1所示。 栈中元素按a1,a2,…an的次序进栈,退栈的第一个元素应为栈顶元素。即栈的修改是按后进先出的原则进行的。栈底栈顶栈顶栈顶栈的示意图特点先进后出(FILO)后进先出(LIFO)入栈出栈插入:入栈、进栈、压栈删除:出栈、弹栈a3a2a1栈底栈顶栈顶栈顶栈的逻辑结构例:有三个元素按a、b、c的次序依次进栈,且每个元素只允许进一次栈,则可能的出栈序列有多少种? 情况1:cba栈顶栈顶栈顶栈底栈的逻辑结构例:有三个元素按a、b、c的次序依次进栈,且每个元素只允许进一次栈,则可能的出栈序列有多少种? 情况1:出栈序列:cc出栈序列:c、bb出栈序列:c、b、aa栈顶栈底栈顶栈的逻辑结构例:有三个元素按a、b、c的次序依次进栈,且每个元素只允许进一次栈,则可能的出栈序列有多少种? 情况2:出栈序列:bba还有其他情况吗?栈顶栈底栈顶栈的逻辑结构例:有三个元素按a、b、c的次序依次进栈,且每个元素只允许进一次栈,则可能的出栈序列有多少种? 情况2:出栈序列:b出栈序列:b、cc出栈序列: b、 c、aa注意:栈只是对表插入和删除操作的位置进行了限制,并没有限定插入和删除操作进行的时间。3.1.1 栈的基本概念2栈的抽象数据类型定义ADT Stack{数据对象:D ={ ai|ai∈ElemSet, i=1,2,…,n,n≥0 }数据关系:R ={ai-1, ai|ai-1,ai∈D, i=2,3,…,n }基本操作:初始化、进栈、出栈、取栈顶元素等} ADT Stack栈的抽象数据类型定义ADT Stack { 数据对象:D={ai| ai ∈ElemSet, i=1,2,...,n, n≥0 } 数据关系:R1={ ai-1,ai | ai-1,ai∈D, i=2,...,n } 基本操作: InitStack(S) 操作结果:构造一个空栈 S。 DestroyStack(S) 初始条件:栈 S 已存在。 操作结果:栈 S 被销毁。 栈的抽象数据类型定义 ClearStack(S) 初始条件:栈 S 已存在。 操作结果:将 S 清为空栈 StackEmpty(S) 初始条件:栈 S 已存在。 操作结果:若栈 S 为空栈,则返回TRUE,否则返回 FALSE。 StackLength(S) 初始条件:栈 S 已存在。 操作结果:返回栈 S 中元素个数,即栈的长度。栈的抽象数据类型定义 GetTop(S, e) 初始条件:栈 S 已存在且非空。 操作结果:用 e 返回S的栈顶元素。 Push(S, e) 初始条件:栈 S 已存在。 操作结果:插入元素 e 为新的栈顶元素。 Pop(S, e) 初始条件:栈 S 已存在且非空。 操作结果:删除 S 的栈顶元素,并用 e 返回其值。栈的抽象数据类型定义 StackTraverse(S, visit( )) 初始条件:栈 S 已存在且非空,v

文档评论(0)

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

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

1亿VIP精品文档

相关文档