三种表达形式,分别为 前缀、后缀 、中缀 表达式。
前缀表达式:操作符写在操作数的前面,这种方法经常用在计算机上,特别是 编译器的设计。其特点是:从右往左扫描表达式,遇到数字就进栈,遇到操作符就就将将栈顶的两个数字出栈,并进行相应的操作运算,之后将运算结果再进栈。重复上面操作,直至扫描结束。
比如现在有 前缀表达式 : -*+ABC/D+EF 。具体过程:
1.先将 E 和 F 进栈,扫描到 + 号,将 E 和 F 出栈并相加得到 (E+F),再将它进栈。
2.将 D 进栈,扫描到 / 号 将 D 和 (E+F)出栈,并进行 D/(E+F)运算,然后把结果进栈。
3.将 A B C 进栈,现在栈顶两个元素是 A 和 B ,扫描到 + 号,将 A B 出栈,并且 进行 A+B 运算,再进栈。
4.扫描到 * 号,现在栈顶两个元素是(A+B)和 C 所以进行 (A+B)*C 运算,再进栈。
5扫描到 - 号,此时栈顶两个元素是 (A+B)*C 和 D/(E+F),出栈,进行(A+B)*C -D/(E+F)运算,再进栈。
6.扫描结束 所以运算结果是 (A+B)*C - D/(E+F)
中缀表达式:其实就是我们平时的算法表达式形式 比如上面的 (A+B)*C - D/(E+F) 就是中缀表达式。
后缀表达式:跟前缀表达式相反,它将数字写在操作符的前面。我们从左向右扫描即可。
例如 现在有 后缀表达式 AB+C*DEF+/- 。具体过程:
1.A 和 B 进栈,扫描到 + 号,A B出栈并且进行 A+B操作运算,然后再进栈。
2. C 进栈,扫描到 * 号,出栈,进行 (A+B)*C操作,再进栈。
3. 将D E F 进栈,扫描到 + 号 将 E 和 F出栈并且进行 E+F 操作,进栈。
4.扫描到 / 号 将 (E+F)和D出栈,进行 (E+F)/D 操作,再进栈
5.扫描到 - 号 ,将 (A+B)*C 和 (E+F)/D出栈,进行 (A+B)*C -(E+F)/D 运算,再进栈。
6. 扫描结束,所以结果是 (A+B)*C -(E+F)/D