中綴表示式轉字尾表示式

2021-06-11 20:47:24 字數 1250 閱讀 1727

演算法:

1.      設定乙個運算子棧(初始時可以將棧頂運算子置為「#」);

2.      按順序掃瞄中綴表示式,當輸入為運算元時就將其輸出到字尾表示式中;

3.      當輸入為運算子時,則比較輸入運算子和棧頂運算子的優先順序。若輸入運算子的優先順序高於棧頂運算子的優先順序,則將輸入運算子入棧;否則,棧頂運算子的優先順序高於或等於輸入運算子的優先順序,彈出棧頂運算子到字尾表示式,然後重新比較輸入運算子和更新後的棧頂運算子的優先順序,若棧為空則輸入運算子入棧;

4.      當輸入運算子為「(」時,直接將其入棧;

5.      當輸入運算子為「)」時,將棧頂運算子出棧至字尾表示式,直到棧頂為「(」,然後將「(」和「)」一同拋棄;

6.      中綴表示式掃瞄完畢後,將運算子棧依次出棧到字尾表示式,直到棧空(或棧頂為「#」)時停止。

簡單題目

description

輸入乙個中綴算術表示式s,s中的運算元為0到9,只含+,-和*,/運算,也可能含有括號(),運算子的計算順序和實際四則運算的計算順序相同. 請輸出與s等價的字尾表示式,注意輸出結果不要含有多餘的括號或空格.

input

輸入有多組資料.

每組資料是乙個中綴表示式s,s的長度不超過50.輸入的s保證合法,而且不包含多餘的空格或製表符.

輸入以#號結束.

output

對於每個中綴表示式,輸出轉換後的字尾表示式,每個輸出佔一行.

sample input

1

1+2*3

(1-2)/3

#

sample output

1

123*+

12-3/

解決**

#include#include#includeusing namespace std;

//獲取優先順序

int getpriority(char a)

if(a=='*'||a=='/')

//左括號

return 0;

}int main()

else

return 0;

}

中綴表示式轉字尾表示式

using system using system.collections.generic using system.text namespace 中綴表示式轉字尾表示式 class convert public void run top break case case while top 1 st...

中綴表示式轉字尾表示式

將乙個普通的中綴表示式轉換為字尾表示式的一般演算法是 首先需要分配2個棧,乙個作為臨時儲存運算子的棧s1 含乙個結束符號 乙個作為輸入字尾表示式的棧s2 空棧 s1棧可先放入優先順序最低的運算子 注意,中綴式應以此最低優先順序的運算子結束。可指定其他字元,不一定非 不可。從中綴式的左端開始取字元,逐...

中綴表示式轉字尾表示式

中綴表示式和字尾表示式的定義,度娘。中綴表示式轉換為字尾表示式 步驟如下 開始掃瞄中綴表示式 如果為數字時,加入字尾表示式 如果為運算子 a.若為 入棧 b.若為 則依次把棧中的的運算子加入字尾表示式中,直到出現 從棧中刪除 c.若為 除括號外的其他運算子,當其優先順序高於棧頂運算子時,直接入棧。否...