最近刷題,看到了很多字尾轉中綴的題目,查了一些網上的教程,在這裡做了乙個簡單詳細的說明。關於中綴轉字尾請看我的另外一篇部落格。
舉個例子~對於字尾表示式abc
d−∗+
ef/−
abcd-*+ef/-
abcd−∗
+ef/
−,它的中綴表示式該怎麼求呢?其實很簡單,下面將會一步一步講解:
1、把字尾表示式逐個元素的壓入到棧中,當壓入的都是字元,則不採取任何操作,當壓入的是運算子,則把運算子下面的兩個數字彈出和運算子進行運算,然後把結果繼續壓入到棧中。
2、對字尾表示式中的所有元素執行該操作,直到結束。
對a bc
d−∗+
ef/−
abcd-*+ef/-
abcd−∗
+ef/
−來說,首先把abc
dabcd
abcd
逐漸壓入到棧中,當再次壓入−
-−的時候,這時候−
-−下面是cdcd
cd,那麼執行c−d
c-dc−
d,並把結果k
1k_1
k1壓入到棧中,這時棧裡有abk
1abk_1
abk1
,繼續把*壓入到棧中,這時有abk
1∗
abk_1*
abk1∗
,此時執行操作b∗k
1b*k_1
b∗k1
,設結果為k
2k_2
k2,把k
2k_2
k2壓入到棧中,此時棧中有ak2
ak_2
ak2
,繼續向棧中壓入+
++,此時棧中有ak2
+ak_2+
ak2
+,執行a+k
2a+k_2
a+k2
,設結果為k
3k_3
k3,將k
3k_3
k3壓入到棧中,此時棧中只有k
3k_3
k3了,繼續往裡壓入ef/,此時棧中有k3e
f/
k_3ef/
k3ef/
,接著的操作和以上完全相同,所以最終的中綴計算過程為:
a +b
∗(c−
d)−e
/f
a+b*(c-d)-e/f
a+b∗(c
−d)−
e/f
字尾轉中綴就是這麼簡單~~~
中綴表示式轉字尾表示式
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棧可先放入優先順序最低的運算子 注意,中綴式應以此最低優先順序的運算子結束。可指定其他字元,不一定非 不可。從中綴式的左端開始取字元,逐...
中綴表示式轉字尾表示式
演算法 1.設定乙個運算子棧 初始時可以將棧頂運算子置為 2.按順序掃瞄中綴表示式,當輸入為運算元時就將其輸出到字尾表示式中 3.當輸入為運算子時,則比較輸入運算子和棧頂運算子的優先順序。若輸入運算子的優先順序高於棧頂運算子的優先順序,則將輸入運算子入棧 否則,棧頂運算子的優先順序高於或等於輸入運算...