利用逆波兰表达式求算数表达式的值

算数表达式即中缀表达式,而逆波兰表达式即为后缀表达式。
例如:
中缀表达式:  2+3*8+9-(1+4)/2 =
后缀表达式:  2 3 8 * 9 1 4 + 2 / - + + =
而这两者之间的区别:前者是由人来计算的,比较直观,而对于机器来说,后者更加的快速,而且还去掉了括号。
后缀表达式的运算规则:从左至右,遇到运算符则将前面两值进行运算:
例如:2 3 8* 的时候,等价于 2 3*8 即 2 24 
原式变成了2 249 1 4 + 2/ - + +
如何将中缀表达式转换为后缀表达式?
假设中缀表达式为centerE 设得到后缀表达式为behindE 在转化过程中我们还需要一个栈 设为 tempS
转换规则是:
   从centerE取出一个元素A,
   如果是数字则加入到behindE中;
  如果是运算符,将操作符A与操作符堆栈tempS栈顶的运算符的优先关系相比较;
   如果,优先关系高于temoS栈顶的运算符,则将该运算符压入tempE;
  倘若不是(低于或等于)的话,则将栈tempE栈顶的运算符从栈中弹出保存到behindE,重复此步骤,直到操作符A压入栈tempE。(对于+、-来说,把tempE全部弹出,然后把A压入tempE中)
如果是左括号"(",则压入栈tempE;(注意,"("将之后的运算符的优先级与之前tempE中运算符的优先级隔开)
如果是右括号")",则栈tempE弹出操作符并加入到behindE中,直到弹出左括号"(";
  重复步骤2中的操作,所有元素处理完毕后将堆栈tempE弹出操作符并加入到behindE中;
这样中缀式表示的简单算术表达式转化为逆波兰表达式所表示的简单算术表式。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值