棧的應用 中序表示式轉後序表示式

2022-07-13 21:24:17 字數 581 閱讀 6800

infix :a+b*c+(d*e+f)*g

postfix :abc*+de*f+g*+

有以下四種情況:

運算元->直接輸出

操作符->將棧頂輸出,直到棧頂優先順序小於該操作符,最後把該操作符壓入棧

'(' ->入棧

')' ->將棧中在'('之後的操作符全部輸出

#include #include #include #include using namespace std;

int main() else if (infix[i] == '(') else if (infix[i] == ')')

// 將'('彈出

op.pop();

} else

op.push(infix[i]);

}} // 將棧中剩餘的操作符輸出

while (!op.empty())

cout << postfix << endl;

return 0;

}

中序表示式轉後序表示式

演算法的思想是這樣的 演算法分為兩個棧,乙個opstack為操作符棧,另一numstack為運算元棧,隨著程式執行運算元棧中里也會有操作符,這是因為小運算元和操作符化作了更大的運算元。如果需要求值,就會將運算元計算出結果,而由於此演算法只是求表示式,所以就保留了操作符。每一次彈出棧時都會涉及到操作符...

前序表示式 中序表示式 後序表示式

執行完成後,先輸出佇列內容,在輸出棧內容,最終結果即是後序表示式 先序表示式 後序表示式 public string infixtopostfix string elements if s.equals continue 碰到 或 運算子 if s.equals s.equals while sta...

中序表示式轉字尾表示式

3 4 5 6 這種寫法是中序表示式 而後序表示式則是將運算子放在運算元的後面,如 3 4 5 6 可以看出後序表示式中沒有括號,只表達了計算的順序,而這個順序恰好就是計算器中的一般計算順序。建立乙個棧s 從左到右讀表示式,如果讀到運算元就將它壓入棧s中,如果讀到n元運算子 即需要引數個數為n的運算...