从左到右依次扫描中缀表达式
遇到元素为数字直接输出
遇到算数运算符入栈
遇到”(“入栈
遇到”)”, 匹配左括号,所以栈顶元素依次出栈,直到”(“, 左括号也要出栈,然后直接扔掉,不放于结果后
遇到符号,但栈顶符号优先大于当前元素,所以出栈〈栈中符号优先级如果都不小于当前元素则全部出栈)。当前元素入栈。
最后如果栈中还有元素,则栈中符号依次出栈。

如果栈顶元素的优先级和当前遍历元素优先级一样呢?

根据运算符的结合性来决定:

  1. 左结合运算符(如 + - \* /
    • 先将栈顶元素出栈并输出
    • 再将当前运算符入栈
  2. 右结合运算符(如 ^
    • 直接将当前运算符入栈,不弹出栈顶元素

这样保证了表达式转换为后缀表达式(逆波兰表达式)时,运算的先后顺序不会改变。