表达式的求解是程序中的一个最基本的问题(王道说的)。他实际是一个栈的典型应用。其中,中缀表达式不仅仅注意的事运算的优先级,还有括号。而后缀表达式的运算符在操作数的后面,在后缀表达式中已考虑了运算符的优先级,没有括号,只有操作数和运算符。如:
中缀表达式:A+B*(C-D)-E/F
后缀表达式:ABCD-*+EF/-
按照标题来,先进性后缀表达式的求值(使用上式中的表达式)。
一、后缀表达式的求解
1、遍历表达式。遇到操作数的时候,我们进行入栈操作。即ABCD进行入栈操作。此时栈如下图所示:
D |
C |
B |
A |
2、接着遍历到“-”,DC进行退栈,计算C-D的值,得到结果后,再将C-D的结果压栈,此时的栈内如图所示:
C-D |
B |
A |
3、继续遍历,到 “*” , C-D退栈,B退栈,计算(C-D)*B ,得到结果,在压入栈,此时栈如图所示:
(C-D)*B |
A |
4、继续遍历,到 “+ ” ,(C-D)*B 退栈,A退栈,计算A+(C-D)*B的值,再将结果进行压栈进去,此时栈内元素:
A+(C-D)*B |
5、继续遍历,遇到操作数 EF,进行入栈,此时栈内元素如下:
F |
E |
A+(C-D)*B |
6、继续遍历 , 到 “/” ,E,F退栈,计算E/F,再将E/F结果进行入栈,栈内元素如下所示:
E\F |
A+(C-D)*B |
7、最后, - 也是操作符,出栈,有:A+(C-D)*B - E\F 。
到此为止了,留着自己以后慢慢看。忘了就可以来看看。
这就是后缀的表达式的求解过程。关于中缀到后缀的转化,这个算法还是看我下一篇吧。这一篇有点多,好吧我承认,有点繁琐(程序的编写繁琐),还没写好。