免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
栈内容提要1、 栈的概念和特性;2、 栈的存储结构;3、 栈的几种运算(操作)实现;4、 栈的应用举例;重点难点1、 栈的概念和特性;2、 栈的应用场合;3、 栈的操作实现;内容讲授 1栈的概念和特性 栈(stack)是一种特殊的线性表。作为一个简单的例子,可以把食堂里冼净的一摞碗看作一个栈。在通常情况下,最先冼净的碗总是放在最底下,后冼净的碗总是摞在最顶上。而在使用时,却是从顶上拿取,也就是说,后冼的先取用,后摞上的先取用。好果我们把冼净的碗“摞上”称为进栈(压栈),把“取用碗”称为出栈(弹出),那么,上例的特点是:后进栈的先出栈。然而,摞起来的碗实际上是一个表,只不过“进栈”和“出栈”都在最顶上进行,或者说,元素的插入和删除是在表的一端进行而已。 一般而言,栈是一个线性表,其所有的插入和删除均是限定在表的一端进行,允许插入和删除的一端称栈顶(Top),不允许插入和删除的一端称栈底(Bottom)。若给定一个栈S=(a1, a2,a3,an),则称a1为栈底元素,an为栈顶元素,元素ai位于元素ai-1之上。栈中元素按a1, a2,a3,an 的次序进栈,如果从这个栈中取出所有的元素,则出栈次序为an, an-1,a1 。也就是说,栈中元素的进出是按后进先出的原则进行,这是栈结构的重要特征。因此栈又称为后进先出(LIFOLast In First Out)表。我们常用一个图来形象地表示栈,其形式如下图: 通常,对栈进行的运算主要有以下几种:在使用栈之前,首先需要建立一个空栈,称建栈;往栈顶加入一个新元素,称进栈(压栈); 删除栈顶元素,称出栈(退栈、弹出); 查看当前的栈顶元素,称读栈;注意与的区别在使用栈的过程中,还要不断测试栈是否为空或已满,称为测试栈。2栈的存储结构栈是一种线性表,在计算机中用向量作为栈的存储结构最为简单。因此,当用编程语言写程序时,用一维数组来建栈十分方便。例如,设一维数组STACK1.n 表示一个栈,其中n为栈的容量,即可存放元素的最大个数。栈的第一个元素,或称栈底元素,是存放在STACK1处,第二个元素存放在STACK2处,第i个元素存放在STACKi处。另外,由于栈顶元素经常变动,需要设置一个指针变量top,用来指示栈顶当前位置,栈中没有元素即栈空时,令top=0,当top=n时,表示栈满。如果一个栈已经为空,但用户还继续做出栈(读栈)操作,则会出现栈的“下溢”;如果一个栈已经满了,用户还继续做进栈操作,则会出现栈的“上溢”。两种情况统称为栈的溢出。3对栈的几种运算的实现方法:(1)建栈 这比较简单,只要建立一个一维数组,再把栈顶指针置为零。栈的容量根据具体的应用要求而定。比如: type arraytype= array1. n of integer;var stack:arraytype; top:integer; 再在程序开始时,置top:=0; (2)测试栈 测试栈顶指针的值,若top=0,则栈空;若top=n,则栈满。(3)读栈 若top=0,则栈空,无栈顶元素可读,出错;若top0,则回送栈顶元素的值STACKtop。(4)进栈(push) 将栈顶指针加1后,再把新元素送到栈顶。假设新元素x为整型,栈的最大深度为n,x和n设置为值型参。而栈和栈顶指针要设置成变量型参。 procedure push(var stack:arraytype;var top:integer;n:integer;x:integer); begin if top=n then begin writeln(Stack full!); halt end else begin top:=top+1; stacktop:= x end end;(5) 退栈(pop) 取得栈顶元素的值后,再把栈顶指针top减1。注意都用变量型参。 procedure pop(var stack:arraytype;var top:integer;var x:integer); begin if top=0 then begin writeln(Stack empty!); halt end else begin x:=stacktop; top:=top-1 endend;注意:由于栈本身和栈顶指针是密不可分的,所以有时我们把他们定义成一个记录来处理。如:type stack=record vec:array1.n of integer; n为栈可达到的最大深度 top:integer; end; 则以上几种运算的实现只要稍做修改即可。 procedure push(var s:stack;x:integer); begin if s.top=n then begin writeln(Stack full!); halt end else begin s.top:=s.top+1; s.vecs.top:= x end end; procedure pop(var s:stack;var x:integer); begin if s.top=0 then begin writeln(Stack empty!); halt end else begin x:=s.vecs.top; s.top:=s.top-1 endend; 出栈有时也可用函数实现,如: function pop(var s:stack):integer; begin if s.top=0 then begin writeln(Stack empty!); halt end else begin pop:=s.vecs.top; s.top:=s.top-1 endend;栈的应用举例1、若已知一个栈的入栈顺序是1,2,3,n,其输出序列为P1,P2,P3,Pn,若P1是n,则Pi是( C )。A)i B)n-1 C)n-i+1 D)不确定2、以下哪一个不是栈的基本运算( B )。A)删除栈顶元素 B)删除栈底的元素 C)判断栈是否为空 D)将栈置为空栈3、设栈S和队列Q初始状态为空,元素e 1 ,e 2 ,e 3 ,e 4 ,e 5 ,e 6依次通过栈S,一个元素出栈后即进入队列Q,若出队的顺序为e 2 ,e 4 ,e 3 ,e 6 ,e 5 ,e 1 ,则栈S的容量至少应该为( B )。 A)2 B)3 C)4 D)54、设栈S的初始状态为空,现有5个元素组成的序列1,2,3,4,5,对该序列在S 栈上依次进行如下操作(从序列中的1开始,出栈后不在进栈):进栈,进栈,进栈,出栈,进栈,出栈,进栈,问出栈的元素序列是:_,栈顶指针的值为_,栈顶元素为:_。 解答:出栈序列为3,4,栈顶指针值为3,栈顶元素为5。5、设栈S和队列Q初始状态为空,元素e 1 ,e 2 ,e 3 ,e 4 ,e 5 ,e 6依次通过栈S,一个元素出栈后即进入队列Q,若出队顺序为e 2 ,e 4 ,e 3 ,e 6 ,e 5 ,e 1 ,则栈S的容量至少应该为_。 解答:为3。6、如下图,有一个无穷大的的栈S,在栈的右边排列着1,2,3,4,5共五个车厢。其中每个车厢可以向左行走,也可以进入栈S让后面的车厢通过。现已知第一个到达出口的是3号车厢,请写出所有可能的到达出口的车厢排列总数(不必给出每种排列)。出口 1 2 3 4 5 S解答:9program exp ; 火车进站问题 const n=4 ;type tt=array1.100 of char ;var inp, t : tt ; k , num : integer ;procedure push (out ,s :tt; it,ot,st :integer); var k: integer; c: tt ; beginif it 0 then begin c:=s ; cst+1:=inpit ; push(out , c, it-1,ot,st+1); end; if st0 then begin c:=out ; cot+1:=sst; push(c, s, it,ot+1,st-1); end;if ot=n then begi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024人教版七年级英语上册期末复习各单元短语清单
- 【初中 物理】测量液体和固体的密度课件 2025-2026学年人教版物理八年级上学期
- 深度解析(2026)《GBT 33944-2017移动式可拆卸工作塔台 安全技术规范》(2026年)深度解析
- 2026年武汉科技大学附属老年病医院招聘30人备考题库含答案详解
- 浙江产权交易所2025年招聘备考题库及完整答案详解1套
- 东莞市城建工程管理局2025年公开招聘编外聘用人员备考题库及答案详解(易错题)
- 2026年广东外语外贸大学附属科学城实验学校临聘教师招聘备考题库及1套完整答案详解
- 2026年台州市黄岩经开投资集团有限公司下属公司公开招聘工作人员备考题库及一套参考答案详解
- 2026年长安科技招聘AI开发岗位备考题库有完整答案详解
- 曲靖市寥廓街道中心幼儿园2026年春季学期教师招聘备考题库及1套参考答案详解
- 2025四川成都经济技术开发区(龙泉驿区)区属国有企业专业技术人员招聘18人笔试考试参考试题及答案解析
- T∕ACEF 235-2025 企业环境社会治理(ESG)评价机构要求
- 质量环境及职业健康安全三体系风险和机遇识别评价分析及控制措施表(包含气候变化)
- 瑞幸入职考试题目及答案解析(2025版)
- 2025年秋人教版小学六年级数学上册竞赛测试题(含答案解析)
- 医疗人力资源效能评价指标体系构建
- 2025至2030防雷行业项目调研及市场前景预测评估报告
- 变电站典型监控信息释义及处置预案
- 太上洞玄灵宝高上玉皇本行集经.经折装.清康熙五十一年内府刊本
- 2025年护理三基考试卷(含答案)
- 2025农资购买合同模板
评论
0/150
提交评论