字尾表示式轉中綴表示式(非常簡單易懂)

2021-09-24 18:02:55 字數 1260 閱讀 4969

最近刷題,看到了很多字尾轉中綴的題目,查了一些網上的教程,在這裡做了乙個簡單詳細的說明。關於中綴轉字尾請看我的另外一篇部落格。

舉個例子~對於字尾表示式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/

k3​ef/

,接著的操作和以上完全相同,所以最終的中綴計算過程為:

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.當輸入為運算子時,則比較輸入運算子和棧頂運算子的優先順序。若輸入運算子的優先順序高於棧頂運算子的優先順序,則將輸入運算子入棧 否則,棧頂運算子的優先順序高於或等於輸入運算...