中缀与后缀表达式

前言

什么是中缀、后缀表达式?还有个前缀表达式。自行百度。这里主要说一说中缀怎么转后缀表达式,以及怎样根据后缀表达式求值。

中缀转后缀

方法有二。

其一:规则法
1、中缀表达式从左到右依次扫描,遇到操作数,直接输出;
2、遇到操作符需要判断(另:正负号应算入操作数):
2.1、'('左括号:直接入栈;
2.2、')'右括号:依次把栈中的运算符输出,直到出现左括号。将左括号从栈中删除,右括号则丢弃。
2.3、如果是其他运算符:判断当前扫描到的运算符和栈顶元素的优先级('*、/'为 2,'+、-'为1,'('为0,其他为-1)。如果当前运算符优先级较高,则直接入栈,否则,依次输出比当前运算符优先级高或相等的运算符,直到遇到不符合条件的元素或者遇到左括号为止,再将当前运算符入栈。
3、扫描结束后,如果运算符存放栈还有元素,则依次输出。

举例:1*3+((2+4)/3+6)

1输出结果:1运算符存放栈:
*入栈结果:1运算符存放栈:*
3输出结果:1 3运算符存放栈:*
*出栈,+入栈结果:1 3 *运算符存放栈:+
(入栈结果:1 3 *运算符存放栈:+(
(入栈结果:1 3 *运算符存放栈:+((
2输出结果:1 3 * 2运算符存放栈:+((
+入栈结果:1 3 * 2运算符存放栈:+((+
4输出结果:1 3 * 2 4运算符存放栈:+((+
+出栈,(删除,)丢弃结果:1 3 * 2 4 +运算符存放栈:+(
/入栈结果:1 3 * 2 4 +运算符存放栈:+(/
3输出结果:1 3 * 2 4 + 3运算符存放栈:+(/
/出栈,+入栈结果:1 3 * 2 4 + 3 /运算符存放栈:+(+
6输出结果:1 3 * 2 4 + 3 / 6运算符存放栈:+(+
+出栈,(删除,)丢弃结果:1 3 * 2 4 + 3 / 6 +运算符存放栈:+
+出栈结果:1 3 * 2 4 + 3 / 6 + +运算符存放栈:
其二:括号法
1、先按照运算符的优先级对中缀表达式加括号,得 (1*3)+((((2+4)/3)+6)) ;
2、将运算符移到括号的后面,得 (13)*((((24)+3)/6)+)+ ;
3、去掉括号,得 13*24+3/6++ 。

后缀表达式求值

1、遍历后缀表达式,遇到操作数就入栈;
2、遇到操作符,就pop两个栈中元素,进行计算,结果再压入栈中。直至得出最终结果。

思想有了,代码就有了~~
详见中缀与后缀表达式–代码篇

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值