codevs 2471 表示式的轉換 二叉樹

2021-07-09 08:57:56 字數 1172 閱讀 3395

2471 表示式的轉換

題目描述 description

平常我們書寫的表示式稱為中綴表示式,因為它將運算子放在兩個運算元中間,許多情況下為了確定運算順序,括號是不可少的,而中綴表示式就不必用括號了。

字尾標記法:書寫表示式時採用運算緊跟在兩個運算元之後,從而實現了無括號處理和優先順序處理,使計算機的處理規則簡化為:從左到右順序完成計算,並用結果取而代之。

例如:8–(3+2*6)/5+4可以寫為:8 3 2 6*+5/–4+

其計算步驟為:8  3   2  6  *  +  5  /  –  4  + 

8  3  12  +  5  /  –  4  + 

8  15  5  /  –  4  + 

8  3  –  4  + 

5  4  + 

9編寫乙個程式,完成這個轉換,要求輸出的每乙個資料間都留乙個空格。

輸入描述 input description

就一行,是乙個字尾表示式。輸入的符號中只有這些基本符號「0123456789+-*/^()」,並且不會出現形如2*-3的格式。

表示式中的基本數字也都是一位的,不會出現形如12形式的數字。

所輸入的字串不要判錯。

輸出描述 output description

若干個中綴表示式,第i+1行比第i行少乙個運算子和乙個運算元,最後一行只有乙個數字,表示運算結果。

運算的結果可能為負數,「/」以整除運算。

樣例輸入 sample input

8–(3+2*6)/5+4

樣例輸出 sample output

8  3   2  6  *  +  5  /  –  4  + 

8  3  12  +  5  /  –  4  + 

8  15  5  /  –  4  + 

8  3  –  4  + 

5  4  + 

9題目分析:可以用棧,也可以用二叉樹

#include#include#include#includeconst int maxn=1000;

int lch[maxn],rch[maxn],num[maxn],nu;char op[maxn];

bool b=true;

int nc=0;

int build_tree(char* s,int x,int y)

for(i=x;i

2471 表示式的轉換

題目描述 description 平常我們書寫的表示式稱為中綴表示式,因為它將運算子放在兩個運算元中間,許多情況下為了確定運算順序,括號是不可少的,而中綴表示式就不必用括號了。字尾標記法 書寫表示式時採用運算緊跟在兩個運算元之後,從而實現了無括號處理和優先順序處理,使計算機的處理規則簡化為 從左到右...

中綴表示式轉字尾表示式

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棧可先放入優先順序最低的運算子 注意,中綴式應以此最低優先順序的運算子結束。可指定其他字元,不一定非 不可。從中綴式的左端開始取字元,逐...