栈及其应用-公开课件(讲义).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文档。上传文档
查看更多
栈及其应用 栈 栈的定义和主要特性 栈的顺序存储方式 栈上的运算 栈的主要特点、栈上的各种操作 双栈的使用 栈结构在解决实际问题中的应用 栈的定义和主要特性 栈(stack)又叫堆栈,是一种运算受限的线性表,即只允许在表的一端进行插入和删除运算。这一端称为栈顶。相对地,另一端称为栈底。 栈的应用:走迷宫、括号匹配、自然数的拆分等回溯/深搜问题都要用到栈; 栈的定义和主要特性 向一个栈中插入新元素又称为进栈、入栈或压栈,即把新元素放到栈顶元素的上面,使之成为新的栈顶元素。 从一个栈中删除元素又称为出栈或退栈、弹栈,即把栈顶元素删除掉,使其相邻元素成为新的栈顶元素。 栈的定义和主要特性 由于栈的插入和删除运算仅在栈顶一端进行,后进栈的元素必定先被删除,因而又把栈称为后进先出表(Last In First Out,简称为LIFO)。 栈的顺序存储结构 栈既然是一种线性表,线性表的存储结构也同样适用于栈。栈的一种最简单的存储结构当然也是顺序存储。因此,可以把栈的顺序存储结构所使用的记录类型定义为: type stack = record vec : array[1..m0] of elemtype; top : integer; end; 栈的顺序存储结构 其中vec域用来顺序存储栈的所有元素,top域用来存储栈顶元素所在单元的编号(即下标),所以又把top称为栈顶指针,m0表示栈能够达到的最大深度(即长度)。 栈的顺序存储结构 设一个栈为T=(a,b,c,d,e,f),栈T所对应的顺序存储结构如图1(a)所示,若在T中插入一个元素g或删除一个元素,则分别对应的顺序存储结构如图1(b)和(c)所示。在栈的顺序存储结构中,为了形象在使栈顶在上、栈底在下,采用的单元编号也是向上递增的。 栈的顺序存储结构 在一个栈中,若top已经指向m0单元,则表示栈满了;若top=0,则表示栈空。向一个满栈中插入元素和从一个空栈中删除元素,都属于错误操作,应当避免。 栈的运算 栈的运算主要是插入和删除。此外,还有读取栈顶元素、置空栈和判断一个栈是否为空等。栈的运算都比较简单,具体列出如下: 进栈(push),即向栈顶插入一个新元素; 出栈(pop),即删除栈顶元素; 读取栈顶元素(readtop); 置空栈(setnull); 判断一个栈是否为空(empty); 栈的运算 根据栈的运算和栈的顺序存储结构,可以写出相应的算法。设S为具有顺序存储结构的stack类型的一个栈,x为具有emletype类型的一个数据元素,则栈的各种运算所对应的算法如下: 进栈算法 检查栈是否已满,若栈已满,则进行“溢出”错误处理; 将栈顶指针上移(即加1); 将新元素赋给栈顶单元。 算法的伪代码形式描述 procedure push(S,x); begin (1)if S.top = mo then error(‘overflow’); (2)S.top :=S.top + 1; (3)S.vec[S.top] := x end; 出栈算法 检查栈是否为空,若栈空,则进行 “下溢”错误处理; 将栈顶元素赋给指定变参X(若不需要保留,则可省去此步和变参X); 将栈顶指针下移(即减1)。 算法的伪代码形式描述 procedure pop(S,X); begin (1)if S.top=0 then error(‘underflow’); (2)X:=S.vec[S.top]; (3)S.top:=S.top – 1 end; 当元素出栈需要保留时,也可以写成函数的形式,其算法描述为: function pop(S): elemtype; begin (1)if S.top = 0 then error(‘underflow’); (2)pop:=S.vec[S.top]; (3)S.top:=S.top – 1 end; 从出栈算法可以看出:原栈顶元素仍然存在(即没有被破坏),只是栈顶指针不指向它,而指向了它下面的元素。 读取栈顶元素的算法 此算法很简单,若不考虑栈空的情况,只要将栈顶元素赋给指定变参或函数名即可。假定写成函数的形式,则为: function readtop(S): elemtype; begin readtop:=S.vec[S.top]; end; 在这个算法中,栈顶指针保持不变。 置空栈算法 此算法也很简单,只要把栈顶指针置0即可。算法描述为:

文档评论(0)

小米兰 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档