算法:
中綴表達式轉后綴表達式的方法:
1.遇到操作數:直接輸出(添加到后綴表達式中)
2.棧為空時,遇到運算符,直接入棧
3.遇到左括號:將其入棧
4.遇到右括號:執行出棧操作,并將出棧的元素輸出,直到彈出棧的是左括號,左括號不輸出。
5.遇到其他運算符:加減乘除:彈出所有優先級大于或者等于該運算符的棧頂元素,然后將該運算符入棧
6.最終將棧中的元素依次出棧,輸出。
例如:a+b*c-(d+e)/f? =》abc*+de+f/-
操作步驟:
1:遇到a:直接輸出
? ? ?后綴表達式:a
? ? ? 堆棧:空
2:遇到+: 直接入棧
? ? ?后綴表達式:a
? ? ? 堆棧:+
3:遇到b: 直接輸出
? ? ?后綴表達式:ab
? ? ? 堆棧:+
4:遇到*:?入棧比較(*優先級大于棧+,所有直接入棧)
? ? ?后綴表達式:ab
? ? ? 堆棧:*+
5:遇到c:?直接輸出
? ? ?后綴表達式:abc
? ? ? 堆棧:*+
6:遇到-:?入棧比較(-優先級小于棧中*或等于+,彈出*+,把-入棧)
? ? ?后綴表達式:abc*+
? ? ? 堆棧:-
7:遇到(: 直接入棧
? ? ?后綴表達式:abc*+
? ? ? 堆棧:(-
8:遇到d: 直接輸出
? ? ?后綴表達式:abc*+d
? ? ? 堆棧:(-
9:遇到+: 入棧比較(+優先級大于(或等于-,直接入棧)
? ? ?后綴表達式:abc*+d
? ? ? 堆棧:+(-
10:遇到e: 直接輸出
? ? ?后綴表達式:abc*+de
? ? ? 堆棧:+(-
11:遇到): 執行出棧操作,直到(,(不輸出
? ? ?后綴表達式:abc*+de+
? ? ? 堆棧:-
12:遇到/: 入棧比較(/優先級大于棧中-,直接入棧)
? ? ?后綴表達式:abc*+de+
? ? ? 堆棧:/-
13:遇到f:直接輸出
? ? ?后綴表達式:abc*+de+f
? ? ? 堆棧:/-
14:遇到中綴表達式結束:彈出所有的運算符并輸出
? ? ?后綴表達式:abc*+de+f/-
? ? ? 堆棧:空