- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
信息学奥赛数据结构教程PASCAL版
信息学奥赛数据结构教程PASCAL版第二课 堆栈和队列
一、堆栈1.概述 栈(stack)是一种特殊的线性表。作为一个简单的例子,可以把食堂里冼净的一摞碗看作一个栈。在通常情况下,最先冼净的碗总是放在最底下,后冼净的碗总是摞在最顶上。而在使用时,却是从顶上拿取,也就是说,后冼的先取用,后摞上的先取用。好果我们把冼净的碗“摞上”称为进栈,把“取用碗”称为出栈,那么,上例的特点是:后进栈的先出栈。然而,摞起来的碗实际上是一个表,只不过“进栈”和“出栈”,或者说,元素的插入和删除是在表的一端进行而已。 一般而言,栈是一个线性表,其所有的插入和删除均是限定在表的一端进行,允许插入和删除的一端称栈顶(Top),不允许插入和删除的一端称栈底(Bottom)。若给定一个栈S=(a1, a2,a3,…,an),则称a1为栈底元素,an为栈顶元素,元素ai位于元素ai-1之上。栈中元素按a1, a2,a3,…,an 的次序进栈,如果从这个栈中取出所有的元素,则出栈次序为an, an-1,…,a1 。也就是说,栈中元素的进出是按后进先出的原则进行,这是栈结构的重要特征。因此栈又称为后进先出(LIFO—Last In First Out)表。我们常用一个图来形象地表示栈,其形式如下图: 通常,对栈进行的运算主要有以下几种: (1) 往栈顶加入一个新元素,称进栈; (2) 删除栈顶元素,称退栈; (3) 查看当前的栈顶元素,称读栈。 此外,在使用栈之前,首先需要建立一个空栈,称建栈;在使用栈的过程中,还要不断测试栈是否为空或已满,称为测试栈。2.栈的存储结构 栈是一种线性表,在计算机中用向量作为栈的存储结构最为简单。因此,当用编程语言写程序时,用一维数组来建栈十分方便。例如,设一维数组STACK[1..n] 表示一个栈,其中n为栈的容量,即可存放元素的最大个数。栈的第一个元素,或称栈底元素,是存放在STACK[1]处,第二个元素存放在STACK[2]处,第i个元素存放在STACK[i]处。另外,由于栈顶元素经常变动,需要设置一个指针变量top,用来指示栈顶当前位置,栈中没有元素即栈空时,令top=0,当top=n时,表示栈满。3.对栈的几种运算的实现方法: (1)建栈 这比较简单,只要建立一个一维数组,再把栈顶指针置为零。栈的容量根据具体的应用要求而定。 (2)测试栈 测试栈顶指针的值,若top=0,则栈空;若top=n,则栈满。 (3)读栈 若top=0,则栈空,无栈顶元素可读,出错;若top0,则回送栈顶元素的值STACK[top]。 使用一维数组来实现以上三种运算都比较简单,不必为其专门编写过程,只要在需要时,在程序中直接写入适当的语句即可。至于进栈和出栈也不复杂,下面给出它们的算法。 (4)进栈 将栈顶指针加1后,再把新元素送到栈顶。假设新元素x为整型。procedure pushstack(var stack:arraytype;var top:integer;n:integer;x:elementtype);begin if top=n then begin witeln(‘Stack full!’); halt end else begin top:=top+1; stack[top]:= x endend; (5) 退栈 取得栈顶元素的值后,再把栈顶指针top减1。procedure popstack(stack:arraytype;var top:integer;var x:elementtype);begin if top=0 then begin writeln(‘Stack empty!’); halt end else begin x:=stack[top]; top:=top-1 endend;4.栈的应用举例 处理表达式是高级语言的编绎中的一个基本问题。它的实现是栈的一个重要应用。通过对处理表达式的讨论,可以帮助我们进一步了解栈的性能。【例5-1】为了便于处理表达式,常常将普通表达式(称为中缀表示)转换为后缀{运算符在后,如X/Y写为XY/}表达式。在这样的表示中可以不用括号即可确定求值的顺序,如:(P+Q)*(R-S) → PQ+RS-*。 后缀表达式的处理过程如下:扫描后缀表达式,凡遇操 作数则将之压进堆栈,遇运算符则从堆栈中弹出两个操作数进行该运算,将运算结果压栈,然后继续扫描,直到后缀表达式被扫描完毕为止,此时栈底元素即为该后缀表达式的值。 输入一个中缀表达式,编程输出其后缀表达式,要求输出的后缀表达式的运算次序与 输入的中缀表达式的运算次序相一致。为简单起见,假设输入的中缀表达式由+(加)、-(减)、×
您可能关注的文档
- 中南大学药剂学复习题.doc
- 促进大学生返乡就业的调查报告 .doc
- 便携式数字电影放映机.doc
- 促进大学生返乡就业的调查报告.doc
- 北京市普通高中毕生业综合素质评价报告册.doc
- 促进小学生自主作文的研究.doc
- 促进新型工业化发展政策.doc
- 促销员促销督导管理办法.doc
- 中南大学远程教育平台计算机维护题与答案整理好.doc
- 中南财经政法大学会计专业有效复习范围.doc
- 1BM3U三P35-clothes公开课获奖课件.pptx
- 分式的加减第3课时分式的混合运算.pptx
- Unit3OnlinetoursComicstripWeletotheunit课件牛津译林版八年级英语下册2.pptx
- 1我们该做的事作文讲评.pptx
- 1应对中考历史学科的复习策略和解题技巧省公开课获奖课件说课比赛一等奖课件.pptx
- Unit5TheValueofMoneyListeningandspeaking课件-高中英语人教版(1)2.pptx
- Unit3KeepFitSectionA(GrammarFocus-3d)语法课课件人教版英语七年级下册.pptx
- 细胞膜的结构和功能课件高一上学期生物人教版必修1.pptx
- 广西壮族自治区河池市2024-2025学年高一上学期1月期末英语试题2.docx
- 湖北省武汉市华中师范大学第一附属中学2024-2025学年高二上学期期末考试历史试题(原卷版).docx
文档评论(0)