中缀表达式(a+b)*c*(d-e/f) 转成后缀 1
中缀表达式转后缀表达式的方法: 1.遇到操作数:直接输出(添加到后缀表达式中)
2.栈为空时,遇到运算符,直接入栈 3.遇到左括号:将其入栈
4.遇到右括号:执行出栈操作,并将出栈的元素输出,直到弹出栈的是左括号,括号不输出。
5.遇到其他运算符:加减乘除:弹出所有优先级大于或者等于该运算符的栈顶元素,然后将该运算符入栈
6.最终将栈中的元素依次出栈,输出。 例如
(a+b)*c*(d-e/f) ->
ab+c*def/-*
遇到(: 进栈:
堆栈:(
遇到a:直接输出: 后缀表达式:a 堆栈:(
遇到+:堆栈:(并没有遇见),所以+入栈 后缀表达式:a
堆栈:(+
遇到b: 直接输出
后缀表达式:ab
堆栈:(+
遇到): 出栈,直到遇见左括号
后缀表达式:ab+
堆栈: 空
遇到*: 堆栈中元素为空,进栈
后缀表达式:ab+
堆栈:*
遇到c:直接输出
后缀表达式: ab+c
堆栈:*
遇到*: 和堆栈中符号优先级相同,弹出栈中的,将该*压入栈
后缀表达式:ab+c*
堆栈:*
遇到(: 进栈:
后缀表达式:ab+c*
堆栈:*(
遇到d: 直接输出
后缀表达式:ab+c*d
堆栈:*(
遇到-: 入栈
后缀表达式:ab+c*d
堆栈:*(-
遇到e: 直接输出
后缀表达式:ab+c*de
堆栈:*(-
遇到/: 高于-,入栈
后缀表达式:ab+c*de
堆栈:*(-/
遇到f: 直接输出
后缀表达式:ab+c*def
堆栈:*(-/
遇到): 出栈,直到左括号出栈
后缀表达式:ab+c*def/-
堆栈:*
遇到中缀表达式结束:弹出所有的运算符并输出 后缀表达式:ab+c*def/-* 堆栈:空