第三章堆栈与队列(StackandQueue).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文档。上传文档
查看更多
第三章堆栈与队列(StackandQueue)

第三章 堆栈与队列 (Stack and Queue) 堆栈(Stack): 只允许在一端插入和删除的顺序表。 允许插入和删除的一端称为栈顶 (top),另一端称为栈底(bottom) 后进先出 (LIFO) 栈顶指针始终指向栈顶的当前位置。 进栈示意 退栈示意 堆栈的基本操作 初始化:Initate(s) 进栈:Push(s,x) 退栈:Pop(s) 取栈顶元素:GetTop(s) 判断栈是否为空:NotEmpty(s) 栈的顺序存储结构 堆栈共用 结构定义: typedef struct { elemtpye Stack[MAXNUM]; int LeftTop; /*左栈顶指针,从0开始*/ int RightTop;/*右栈顶指针,从MAXNUM-1开始*/ }dqstype; dqstype s; 初始化操作: viod Initation(dqstype *s) { s-LeftTop = -1; s-RightTop = MAXNUM; } 进栈操作 int PushDQStack(dqstype *s char WhichStack, elemtype x) { if(s-LeftTop = s-RightTop -1) {…} if(WhichStack != ‘L’ WhichStack != ‘R’) {…} if(WhichStack == ‘L’ ) s-Stack[ ++ s-LeftTop] = x; else s-stack[ -- s-RightTop] = x; return 1; } 出栈操作 elemtype PopDQStack(dqstype *s , char WhichStack) { if(WhichStack != ‘L’ WhichStack != ‘R’) {…} if(WhichStack == ‘L’) { if(s-LeftTop 0) {…} return s-Stack[s-LeftTop --]; } else { if(s-RightTop = MAXNUM) {…} return s-Stack[s-RightTop ++]; } } 堆栈的链式结构 堆栈的应用 一、问题的引出 堆栈的应用非常广泛,只要问题满足LIFO原则,均可使用堆栈做数据结构。下面介绍一个堆栈在表达式计算中的应用问题。 表达式计算是编译系统中的一个基本问题,该问题是把一个便于人理解的表达式变换成便于机器理解的形式,然后翻译成能正确求值的机器指令序列。该问题可以借助于堆栈解决。 在机器内部,任何一个表达式都是由操作数、运算符和分界符组成的,分界符标志了表达式的结束。操作数、运算符和分界符统称做单词。 这里以算术表达式为例进行讨论,并假设表达式中只含“+”、“-”、“×”、“/ ”等四种运算符,以及“( ”和“ )”。 例如,一个以某种高级语言列写的表达式A+(B-C/D)*E称之为中缀表达式。编译系统首先将它变换为ABCD/-E*+形式(后缀表达式),然后再根据后缀表达式生成一系列机器指令或直接求值。我们看到,中缀表达式中含有括号,并且运算符一般总是出现在两个操作数之间。后缀表达式中的运算符出现在操作数之后,并且不含括号。 将中缀表达式变换为后缀表达式时,必须按运算规则进行。算术四则运算的规则是: (1)先乘除后后加减; (2)先括号内后括号外; (3)同级别时先左后右。 按照这个规则得到的后缀表达式 ABCD/-E*+具有下面特点: (1)后缀表达式与中缀表达式的操作数的先后次序相同,只是运算符的先后次序有所改变。后缀表达式中的运算符次序就是其执行次序。 (2)后缀表达式中没有括号。 编译系统在处理后缀表达式时,不必考虑运算符的优先关系,只要从左到右依次扫描后缀表达式的各个单词,当读到一个单词为运算符时,就对该运算符前面的两个操作数施以该运算符所代表的运算,然后将结果存入一个临时单元Ti(i≥1)中,并作为一个新的操作数接着进行上述过程,直到表达式处理完毕。 编译系统中,表达式的计算分为两个步骤: (1)把中缀表达式变换为相应的后缀表达式; (2)根据后缀表达式计算表达式的值。 二、由中缀表达式到后缀表达式的变换 把中缀表达式变换为相应的后缀表达式时,要符合运算规则。下表是加、减、乘、除、左括号、右括号和分界符之间的优先级关系。 二、由中缀表达式到后缀表达式的变换 编译系统从左到右依次扫描中缀表

文档评论(0)

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

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

1亿VIP精品文档

相关文档