天天看點

關于棧的三種表達式

字首表達式(波蘭表達式)

字首表達式也稱為波蘭表達式,字首表達式的運算符位于操作數之前 如

( 3 + 4 ) * 5 - 6

對應的字首表達式為

- * + 3 4 5 6

字首表達式的計算機求值

從右至左掃描表達式,遇到數值時,将數字壓入棧中,遇到運算符時,彈出棧頂的兩個數,用運算符對它們做相應的計算,并将結果入棧,重複執行 ,最後留在棧裡的元素即為結果

如 (3 + 4 )5 - 6 的字首表達式為 ` -+ 3 4 5 6

1.從右至左掃描,将 6、5、4、3壓入棧 2.遇到 + 運算符時,彈出3和4計算出3+4=7,再将7入棧 3.接下來是

*

運算符,彈出7和5,計算得出35,再次入棧 4.最後是

-`運算符,計算出35-6即位29,此時29即為最終結果

中綴表達式

中綴表達式,即為我們平常看到的表達式,人了解起來很容易

( 3 + 4 ) * 5 - 6

中綴表達式計算機了解起來困難

如 完成一個中綴表達式的計算(https://www.zihanzy.com/articles/327)

為了友善,一般我們要将中綴表達式,轉換為字首或字尾表達式在給計算機進行運算。

如 完成一個字尾表達式的計算 (https://www.zihanzy.com/articles/331 )

字尾表達式(逆波蘭表達式)

字尾表達式也稱為逆波蘭表達式與字首表達式相似,隻是運算符位于操作數之後

( 3 + 4 ) * 5 - 6

對應的字尾表達式為

3 4 + 5 * 6 -

a + b

=

a b +

a+(b-c)

=

a b c - +

a + (b - c) * d

=

a b c - d *

字尾表達式計算求值

從左至右掃描表達式,遇到數值時,将數字壓入棧中,遇到運算符時,彈出棧頂的兩個數,用運算符對它們做相應的計算,并将結果入棧,重複執行 ,最後留在棧裡的元素即為結果

如 (3 + 4 ) 5 - 6 的字首表達式為 ` 3 4 + 5 6 -

1.從左至右掃描,将3 4 壓入棧 2.遇到 + 運算符時,彈出4和3計算出3+4=7,再将7入棧 3.接下來是

*

運算符,彈出5和7,計算得出35,再次入棧 4.最後是

-`運算符,計算出35-6即位29,此時29即為最終結果