初始化一个栈,用于保存暂时不能确定运算顺序的运算符
从左到右处理各个元素,知道末尾出现三种情况:
1. 遇到操作数,直接加入后缀表达式
2. 遇到界限符。遇到“(”直接入栈;遇到“)”依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。注意“(”不加入后缀表达式。
3. 遇到运算符。依次弹出栈中优先级高于或者等于当前比较的运算符,并加入后缀表达式,若碰到“(”或者栈空时,停止操作。之后再把当前运算符压入栈中。
上述三种情况处理完 字符串后,将栈中剩余运算符依次弹出,并加入后缀表达式
中缀表达式的计算:
一边用中缀表达式转为后缀表达式,一边用栈来计算后缀表达式的值。
初始化两个栈,操作数栈和运算符栈
1. 扫描到操作数栈,压入操作数栈
2. 扫描到运算符,则按照中缀转后缀的相同逻辑压入运算符栈(期间也会弹出运算符,每当弹出一个运算符时,就需要再弹出两个操作数栈的栈顶元素,并执行相应的运算,运算结果再压回操作数栈)