表达式的逆波兰表示_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > 表达式的逆波兰表示

表达式的逆波兰表示

 2010/12/4 11:51:50  ErinToJerry  http://erintojerry.javaeye.com  我要评论(0)
  • 摘要:后缀表达式又叫逆波兰表达式。那么如何讲中缀表达式转化为后缀表达式呢?比如已知中缀表达式a+b*c+(d*e+f)*g,如何将其转化为后缀表达式abc*+de*f+g*+呢?有4个基本原则。1.当读到操作数时,立即输出(由后缀表达式的形式明显可以看出,操作数的输出优先级要比操作符要高);当读到操作符时,并不立即输出,而是将其存于堆栈中。2.如果见到右括号,那么将栈元素弹出,直到遇到左括号。但是左括号只是弹出,并不输出。3.如果见到其他符号,我们将栈中输出优先级更高(或者相同)的符号全部弹出
  • 标签:表达式

????? 后缀表达式又叫逆波兰表达式。那么如何讲中缀表达式转化为后缀表达式呢?
????? 比如已知中缀表达式a+b*c+(d*e+f)*g,如何将其转化为后缀表达式abc*+de*f+g*+呢?有4个基本原则。


????? 1.?当读到操作数时,立即输出(由后缀表达式的形式明显可以看出,操作数的输出优先级要比caozuofu.html" target="_blank">操作符要高);当读到操作符时,并不立即输出,而是将其存于堆栈中。
????? 2.?如果见到右括号,那么将栈元素弹出,直到遇到左括号。但是左括号只是弹出,并不输出。
????? 3.?如果见到其他符号,我们将栈中输出优先级更高(或者相同)的符号全部弹出。然后将此符号入栈。(即把别人挤出去之后,自己入栈)
????? 4.?强调一下,比如见到符号“+”,如果栈顶有符号“-”。优先级相同。需要将“-”弹出,“+”入栈。优先级相同也要弹出!


????? 下面举个例子,写出a+b*c+(d*e+f)*g的后缀表达式。

???? (画图表示不方便,我们用下表表示转换过程)

?

??
?????

?

备注1:
????? 首先读到a,因为a属于操作数,直接输出

备注2:
????? 读到“*”号。栈顶符号“+”号的优先级不比“*”号的优先级高,也不是不相同。故将“*”入栈。

备注3:
????? 读“+”号,因为栈顶符号“*”比读到的“+”优先级高,栈顶符号“+”与独到的“+”优先级相同,故“*”和“+”都弹出。将刚读到的“+”号入栈。

备注4:
????? 读到“(”,将“)“后的栈顶元素全部输出。

备注5:
????? 输入串遍历完毕,将栈中剩余元素全部弹出。

?

  • 相关文章
发表评论
用户名: 匿名