第3章 栈与队列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文档。上传文档
查看更多
第3章 栈与队列1-栈

数据结构讲义 第3章 栈和队列 栈(Stack):限定仅在表尾进行插入或删除操作的线性表。 表尾—栈顶,表头—栈底。 特点:先进后出(FILO)或后进先出。 作业3: 栈的应用 实验目的:掌握栈的基本结构和操作方法,并能利用其解决实际问题。 实验内容: 假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序任意,即([]())或[([][])]等都为正确的格式,而[(])为不正确的格式。利用栈编程序检验表达式中的括号是否合法。 提示: 1,先实现栈的基本操作:初始化,入栈,出栈等。 2,每读入一个括号,若是右括号,则或者是置于栈顶的左括号得以消解,或者是不合法的情况;若是左括号,则直接入栈。 3,可用顺序栈或者链栈实现。 * * 栈和队列是两种应用非常广泛的数据结构,它们都来自线性表数据结构,都是“操作受限”的线性表。 本章将讨论栈和队列的基本概念、存储结构、基本操作以及这些操作的具体实现。 3.1.1 栈的基本概念 an a1 a2 ……... 栈底 栈顶 ... 出栈 进栈 栈s=(a1,a2,……,an) 1 栈的概念 栈(Stack):是限制在表的一端进行插入和删除操作的线性表。又称为后进先出LIFO (Last In First Out)或先进后出FILO (First In Last Out)线性表。 栈顶(Top):允许进行插入、删除操作的一端,又称为表尾。用栈顶指针(top)来指示栈顶元素。 栈底(Base):是固定端,又称为表头。 空栈:当表中没有元素时称为空栈。 设栈S=(a1,a2,…an),则a1称为栈底元素,an为栈顶元素,如图3-1所示。 栈中元素按a1,a2,…an的次序进栈,退栈的第一个元素应为栈顶元素。即栈的修改是按后进先出的原则进行的。 图3-1 顺序栈示意图 a1 a2 ai an ?? ?? base top 进栈(push) 出栈(pop) 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 栈的基本操作 1.初始化栈:INISTACK(S) 将栈S置为一个空栈(不含任何元素)。 2.进栈:PUSH(S,X) 将元素X插入到栈S中,也称为 “入栈”、 “插入”、 “压入”。 3.出栈: POP(S) 删除栈S中的栈顶元素,也称为”退栈”、 “删除”、 “弹出”。 4.取栈顶元素: GETTOP(S,e) 取栈S中栈顶元素。 5.判栈空: StackEmpty(S) 判断栈S是否为空,若为空,返回值为true,否则返回值为false。 栈的顺序存储结构简称为顺序栈,和线性表相类似,用一维数组来存储栈。根据数组是否可以根据需要增大,又可分为静态顺序栈和动态顺序栈。 ◆ 静态顺序栈实现简单,但不能根据需要增大栈的存储空间; ◆ 动态顺序栈可以根据需要增大栈的存储空间,但实现稍为复杂。 3.1.2 栈的顺序存储表示 采用动态一维数组来存储栈。所谓动态,指的是栈的大小可以根据需要增加。 ◆ 用base表示栈底指针,栈底固定不变的;栈顶则随着进栈和退栈操作而变化。用top(称为栈顶指针)指示当前栈顶位置。 ◆ 用top=base作为栈空的标记,每次top指向栈顶数组中的下一个存储位置。 ◆ 结点进栈:首先将数据元素保存到栈顶(top所指的当前位置),然后执行top加1,使top指向栈顶的下一个存储位置; 3.1.2.1 栈的动态顺序存储表示 ◆ 结点出栈:首先执行top减1,使top指向栈顶元素的存储位置,然后将栈顶元素取出。 图3-2是一个动态栈的变化示意图。 图3-2 (动态)堆栈变化示意图 空栈 bottom top 元素a进栈 bottom top a 元素b,c进栈 bottom top a b c 元素c退栈 bottom top a b bottom top a b d e f 元素d,e,f进栈 基本操作的实现 1 栈的类型定义 #define STACK_SIZE 100 /* 栈初始向量大小 */ #define STACKINCREMENT 10 /* 存储空间分配增量 */ typedef int ElemType ; typedef struct sqstack { ElemType *base; /* 栈不存在时值为NULL */ ElemType *top;

文档评论(0)

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

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

1亿VIP精品文档

相关文档