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的運算...