栈的应用Ⅰ--后缀表达式 括号匹配

一、后缀表达式
  在我们日常生活中所见表达式都是中缀表达式,如 “5*(3+7)-4/2”,这中表达式符合我们的思维逻辑,可读性强,但是不利于计算机的解析。由波兰逻辑学家J.Lukasiewicz发明出后缀表达式,比如上式转变为后缀表达式”5 3 7 + * 4 2 / -“,这种人类难以适应的表达顺序,计算机却很受用。

1.计算机应用后缀表达式的过程:
如后缀表达式:”5 3 7 + * 4 2 / -”
规则:从左到右遍历表达式的每一个数字和符号,遇到数字就进栈,遇到是符号,就将处于栈顶的两个数字出栈,进行运算,运算结果进栈,一直到最终获得结果。

①初始化一个空栈。此栈用来对要运算的数字进出使用。

②后缀表达式中前三个都是数字,所以5,3,7进栈。
这里写图片描述

③接下来是’+’运算符,将栈顶的两个元素出栈进行加法运算,再将结果进栈。

④之后是’*’运算符,将栈顶的两个元素出栈进行运算,将运算结果再进栈。这里写图片描述

⑤之后4,2进栈,遇’/’将2,4出栈,2作为除数,4作为被除数。
这里写图片描述

⑥之后遇’-‘,50作为被减数。48入栈,最后出栈,栈为空结果为48.
这里写图片描述

二、中缀表达式转后缀表达式

如:中缀表达式”5*(3+7)-4/2”转为”5 3 7 + * 4 2 / -“

规则:顺序遍历数字和符号,数字输出,成为后缀表达式的一部分,遇符号则判断栈顶元素与其的优先级,若为右括号或者优先级不高于栈顶元素,则将栈顶元素依次出栈并输出,并将当前符号进栈,直到后缀表达式输出完成。

①5输出,’*’入栈,’(‘入栈,3输出,’+’入栈,7输出。
输出:5 3 7
这里写图片描述

②遇到’)’,则将’(‘之前的符号全部出栈输出。
输出:5 3 7 +
这里写图片描述

③遇到’-‘,优先级比栈顶’* ‘低,’* ‘出栈输出,’-‘进栈。
输出:5 3 7 + *

④输出4,遇到’/’比栈顶’-‘高,’/’进栈,输出2,表达式读取结束,栈内符号依次输出。
输出:5 3 7 + * 4 2 / -
这里写图片描述
中缀表达式转后缀表达式结束

三、括号匹配
三种配对括号’(‘,’)’,’[‘,’]’,’{‘,’}’的序列匹配

规则:做一个空栈,读入字符直到字符串尾。如果读到的字符为开放符号’(‘,’[‘,’{‘,则将其推入栈中,如果字符为封闭符号’)’,’]’,’}’,如果栈为空则报错,否则将栈顶元素弹出,如果不是对应的封闭元素,则报错,在字符串读取结束,栈不为空则报错。

如字符串: (a)c[b(d)]e(g{f})
①则顺序读取字符,第一个字符为’(‘开放符号,则将’(‘压栈。
这里写图片描述
②读取a,不进行操作,继而读取’)’为封闭符号,进行出栈匹配。栈顶元素为’(‘是对应的配对符号,则继续操作…
③直到最后字符串读取完成,查看top是否为-1。

四、函数栈
是重要知识点,保留。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值