- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构中栈的介绍
1.栈的概念
栈Stack)是一种特殊的表这种表只在表进行插入和删除操作。称为栈顶称为栈底。不含任何元素的栈称为空栈。栈的修改是按后进先出的原则进行的栈又称为后进先出(Last In First Out)表,简称为LIFO表。
如图1所示:假设一个栈S中的元素为an,an-1,..,a1,则称a1为栈底元素,an为栈顶元素。
图1图 2栈的存储与由于栈是一个特殊的表,可以用数组来实现栈。同时t(称为栈顶来指示栈顶元素的当前。我们用一个数组s[1..m]来表示一个栈时,将栈底固定在数组的底部,即s[1]为最早入栈的元素,并让栈向数组上方(下标增大的方向)扩展。当t=0时,表示这个栈为一个空栈。当t=时,表示这个栈已满可以定义栈:=栈;
type
stack=array[1..m] of stype; {栈的数据类型}
var
s:stack;
t:integer; {栈顶进栈、出栈过程:进栈(push)①若≥m时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);②置=t+1(栈指针加1,指向进栈地址);③S(t)=x,结束(为新进栈的元素);procedure push(var s:stack; x:integer;var t:integer);
begin
if t=m then writeln(overflow)
else
begin
t:=t+1;s[t]:=x;
end
end;
(2)退栈(pop)①若≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②);②x=s(t),(退栈后的元素赋给x);③t=t-1,结束(栈指针减1,指向栈顶)。function pop(var s:stack;var t:integer):integer;
begin
if t=0 then writeln(underflow)
else
begin
pop:=s[t];t:=t-1;
end
end;
(3)读栈()function top(var s:stack; t:integer):integer;
begin
if t=0 then writeln(underflow)
else
top:=s[t];
end;
3栈的应用举例
【例10-4】.设栈S的初始状态为空,元素a,b,c,d,e,f,g依次入栈,以下出栈序列不可能出现的是( )。
???A.a,b,c,e,d,f,g? ?B.b,c,a,f,e,g,d?? C.a,e,d,c,b,f,g
???D.d,c,f,e,b,a,g?? E.g,e,f,d,c,b,a
题解:此题可以采用模拟的方法,依次判断各个选项是否能出现。如A,每个元素依次进栈然后出栈,即得到此序列。再来看B,a,b进栈,然后b出栈,c进栈后出栈,a出栈,d,e,f进栈,f,e出栈,g进栈后出栈,d出栈,可以满足。依此类推,发现只有E不能满足,答案为E。
【例10-5】.如下图,有一个无穷大的的栈S,在栈的右边排列着1,2,3,4,5共五个车厢。其中每个车厢可以向左行走,也可以进入栈S让后面的车厢通过。现已知第一个到达出口的是3号车厢,请写出所有可能的到达出口的车厢排列总数。
出口← ← ?1 ???2 ???3 ???4 ???5 ? S↓ ? ?
题解:首先必是1,2,3进栈,然后3出栈,此时栈中有元素1,2,未进栈元素有4,5。我们可以分情况讨论,由于2一定在1之前出栈,我们可以讨论4,5的出栈顺序,如下:
(1)4先出栈:此时相当于4,5不经过栈直接到出口。相当于1,2,4,5四个数字的一个排列,2排在1前,4排在5前,共有种数/4=6(种)。
(2)5先出栈:此时4和5的出栈顺序必连续,有以下三种排列:
5 4 2 1;2 5 4 1;2 1 5 4。
综上所述,总的排列数是9种。
【例1】计算后缀表达式
题目描述
数学上使用的是中缀表达式,在中缀表达式中需要使用括号来改变运算的优先级。
事实上我们可以用后缀表达式或前缀表达式,这两种表达式里就可以完全避免使用括号。
后缀表达式:运算符放在两个运算对象之后。所有计算按运算符出现的顺序,由左而右进行。
例如:3*(5-2)+7 对应的后缀表达式为3.5.2.- *7.+@
现有一后缀表达式,让你求表达式的值,已知运算符仅限于+,-,*,/四种运算。输入@表示表达式结束,’.’为操作数的结束符。如:后缀表达式3.5.2.- *7.+@的值为16。
输入
一个后缀表达式,无需判错,“/”作为整除运算。
输出
后缀表达式的值,一个整数。
参考程序:
program ex10_6;
const
n=30;
type
st
您可能关注的文档
- 数学广角教学设计和反思.doc
- 数学建模各类参考文献条目的编排格式和示例.doc
- 数学必修1–1第二章圆锥曲线与方程.doc
- 数学手册第2章初等几何图形的计算与作图1.doc
- 数学是1门严谨的学科.doc
- 数学物理方程第2章分离变量法word版.doc
- 数学研究的对象是数量及空间的关系.doc
- 数学第五单元––袁[1].doc
- 数学阅读及语文阅读的区别(y).doc
- 数年CAD经验牛人分享.doc
- 新型县域商业生态圈构建与消费升级路径研究.docx
- 文创盲盒在文创产品市场中的品牌建设与传播.docx
- 2025年快消品行业数字化营销效果评估与营销策略创新报告.docx
- 2025年储能技术环境友好性在储能电站项目市场拓展中的应用研究报告.docx
- 2025年无人机产业在低空经济政策下的商业模式创新分析.docx
- 中国烹饪史的启示 测试题-《烹饪概论》(后附答案).doc
- 直播电商行业用户流失原因分析及转化策略报告.docx
- 2025年海洋生物多样性保护与经济价值研究报告.docx
- 文创盲盒产品2025年定价策略与品牌形象塑造分析.docx
- 露营地生态旅游项目开发风险与2025年风险防范措施.docx
文档评论(0)