一、中綴表示式需要轉換成字尾表示式,轉換演算法:
1、遇到運算元:直接輸出(新增到字尾表示式中)
2、棧為空時,遇到運算子:直接入棧
3、遇到左括號:將其入棧
4、遇到右括號:執行出棧操作,並將出棧的元素輸出,直到彈出棧的是左括號,左括號不輸出。
5、遇到其他運算子,加減乘除:彈出所有優先順序大於或者等於該運算子的棧頂元素,然後將該運算子入棧
6、最終將棧中的元素依次出棧,輸出。
例如:a+b*c+(d*e+f)*g ----> abc*+de*f+g*+
二、字尾表示式求值:
1、設定一個棧,開始時,棧為空;
2、然後從左到右掃描字尾表示式,若遇運算元,則進棧;
3、若遇運算子,則從棧中退出兩個元素,先退出的放到運算子的右邊,後退出的放到運算子左邊,運算後的結果再進棧,直到字尾表示式掃描完畢;
4、最後,棧中僅有一個元素,即為運算的結果。
一、中綴表示式需要轉換成字尾表示式,轉換演算法:
1、遇到運算元:直接輸出(新增到字尾表示式中)
2、棧為空時,遇到運算子:直接入棧
3、遇到左括號:將其入棧
4、遇到右括號:執行出棧操作,並將出棧的元素輸出,直到彈出棧的是左括號,左括號不輸出。
5、遇到其他運算子,加減乘除:彈出所有優先順序大於或者等於該運算子的棧頂元素,然後將該運算子入棧
6、最終將棧中的元素依次出棧,輸出。
例如:a+b*c+(d*e+f)*g ----> abc*+de*f+g*+
二、字尾表示式求值:
1、設定一個棧,開始時,棧為空;
2、然後從左到右掃描字尾表示式,若遇運算元,則進棧;
3、若遇運算子,則從棧中退出兩個元素,先退出的放到運算子的右邊,後退出的放到運算子左邊,運算後的結果再進棧,直到字尾表示式掃描完畢;
4、最後,棧中僅有一個元素,即為運算的結果。