字尾表示式(逆波蘭表示式)的計算

2021-10-24 03:01:44 字數 1586 閱讀 9826

/**

* 字首表示式

* 3+4)*5-6對應的字首表示式就是-*+3456

* * 從左至右掃瞄表示式,遇到數字時,將數字壓入堆疊,遇到運算子時,

* 彈出棧頂的兩個數,用運算子對它們做相應的計算,並將結果入棧;

* 重複上述過程直到表示式式最左端,最後運算得出的值即為表示式的結果

* * 例如:(3+4)*5-6對應的字首表示式就是-*+3456,針對字首表示式求值步驟如下:

* * 1)從右至左掃瞄,將6、5、4、3壓入堆疊

* 2)遇到+運算子,因此彈出3和4,計算出3+4的值,得7,再將7入棧

* 3)接下來式*運算子,因此彈出7和5,計算7*5=35,將35入棧

* 4)最後是-運算子,計算35-6的值,即39.

* 中綴表示式 3+4*6

* * * 字尾表示式(逆波蘭表示式)

* (3+4)*5-6對應的字尾表示式34+5*6-

* * 從左至右掃瞄表示式,遇到數字時,將數字壓入堆疊,遇到運算子時,

* 彈出棧頂的兩個數,用運算子對它們做相應的計算,並將結果入棧;

* 重讀上述過程直到表示式最右端,得出結果

* 例如:3+4)*5-6對應的字尾表示式34+5*6-

* 1)從左至右掃瞄,將3和4壓入堆疊

* 2)遇到+運算子,因此彈出4和3,計算3+4,得7,再將7入棧

* 3)將5入棧

* 4)接下來時*運算子,因此彈出5和7,計算7*5=35,將35入棧

* 5)6入棧

* 6)最後時-運算子,計算35-6的值,即39

*/public

class

polandnotation

//將乙個逆波蘭表示式,依次將資料和運算子放入到arraylist中

public

static list

getliststring

(string suffixexpression)

return list;

}//完成對逆波蘭表示式的運算

/* 1)從左至右掃瞄,將3和4壓入堆疊

2)遇到+運算子,因此彈出4和3,計算3+4,得7,再將7入棧

3)將5入棧

4)接下來時*運算子,因此彈出5和7,計算7*5=35,將35入棧

5)6入棧

6)最後時-運算子,計算35-6的值,即39*/

public

static

intcalcuate

(list

ls)else

else

if(l.

equals

("-"))

else

if(l.

equals

("*"))

else

if(l.

equals

("/"))

else

stack.

push

(res +"")

;}}return integer.

parseint

(stack.

pop())

;}}

逆波蘭表示式 字尾表示式

字首表示式又稱波蘭式,字首表示式的運算子位於運算元之前。比如 3 4 5 6中綴表示式就是常見的運算表示式,如 3 4 5 6字尾表示式又稱逆波蘭表示式,與字首表示式相似,只是運算子位於運算元之後,比如 3 4 5 6 人類最熟悉的一種表示式1 2,1 2 3,3 42 4等都是中綴表示法。對於人們...

逆波蘭表示式 中綴表示式 字尾表示式

1 我們這裡要實現的是 將中綴表示式轉換成字尾表示式,然後再計算最終結果,參考部落格。具體轉化演算法如下 中綴表示式a b c d e f g,其轉換成字尾表示式則為abc de f g 轉換過程需要用到棧,具體過程如下 1 如果遇到運算元,我們就直接將其輸出。2 如果遇到操作符,則我們將其放入到棧...

逆波蘭表示式 中綴表示式 字尾表示式

1 我們這裡要實現的是 將中綴表示式轉換成字尾表示式,然後再計算最終結果,參考部落格。具體轉化演算法如下 中綴表示式a b c d e f g,其轉換成字尾表示式則為abc de f g 轉換過程需要用到棧,具體過程如下 1 如果遇到運算元,我們就直接將其輸出。2 如果遇到操作符,則我們將其放入到棧...