/**
* 字首表示式
* 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 如果遇到操作符,則我們將其放入到棧...