1.初始化一个运算符栈。
2.从算数表达式输入的字符串中依次从左向右每次读取一个字符。
3.如果当前字符是操作数,则直接填写到后缀表达式。
4.如果当前字符是(左括号,将其压入运算符栈(第一步定义)。
5.如果当前字符为运算符,则分两种情况:
.当运算符栈为空,将其压入运算符栈。
.当此运算符的优先级大于栈顶元素的时候),则将此运算符压入运算符栈;否则,弹出栈顶运算符到后缀表达式,反复弹出,直到该运算符优先级大于栈顶元素或者栈为空时,然后将当前运算符压栈。回到步骤2继续读取.
6.如果当前字符是)右括号,反复将栈顶元素弹出到后缀表达式,直到栈顶元素是左括号(为止,并将左括号从栈中弹出丢弃。
7.如果读取还未完成,回到步骤2.
8.如果读取完成,则将栈中剩余的运算符依次弹出到后缀表达式。
举个例子:
a+b*c-(d+e)
1.读取到操作数 a,将其放入最终后缀表达式,此时表达式为:a , 栈为空
2.读取到运算符 +,此时栈为空,+ 入栈,此时表达式为:a , 栈为:+
3.读取到操作数 b, 将其放入最终后缀表达式,此时表达式为:ab , 栈为: +
4.读取到运算符 *, 栈不为空,* 优先级大于栈顶元素 + ,* 入栈,此时表达式为:ab , 栈为: +*
5.读取到操作数 c, 将其放入最终后缀表达式,此时表达式为:abc , 栈为: +*
6.读取到运算符 -,栈不为空, - 优先级小于栈顶元素 *,* 出栈,此时表达式为:abc* , 栈为: +,
-优先级等于栈顶元素 +, + 出栈,此时表达式为:abc*+ , 栈为: 空
栈为空,所以 - 入栈,此时表达式为:abc*+ , 栈为: -
7.读取到运算符( , ( 直接入栈,此时表达式为:abc*+ , 栈为: -(
8.读取到操作数 d,将其放入最终后缀表达式,此时表达式为:abc*+d , 栈为: -(
9.读取到运算符 +,+ 优先级大于 ( , + 入栈,此时表达式为:abc*+d , 栈为: -(+
10.读取到操作数 e,将其放入最终后缀表达式,此时表达式为:abc*+de , 栈为: -(+
11.读取到运算符 ),栈顶元素为 +,出栈 ,此时表达式为:abc*+de+ , 栈为: -(
栈顶元素为( ,出栈, 此时表达式为:abc*+de+ , 栈为: -
12,此时表达式已经遍历完毕,按顺序出栈,栈顶元素为 - ,出栈,此时表达式为:abc*+de+- , 栈为: 空
结束。
后缀表达式求值: