1)字首表示式又稱波蘭式,字首表示式的運算子位於運算元之前
(3+4)×5-6 對應的字首表示式就是 - × + 3 4 5 6
2)字首表示式的計算機求值:從右至左掃瞄表示式,遇到數字時,將數字壓入堆疊,遇到運算子時,彈出
棧頂的兩個數,用運算子對它們做相應的計算(棧頂元素和次頂元素),並將結果入棧.重複上述過程直
到表示式最左端,最後運算得出的值即為表示式的結果 減法是棧頂減次頂
3)例如: (3+4)×5-6 對應的字首表示式就是 - × + 3 4 5 6,針對字首表示式求值步驟如下:
a.從右至左掃瞄,將6、5、4、3壓入堆疊
b.遇到+運算子,因此彈出3和4(3為棧頂元素,4為次頂元素),計算出3+4的值,得7,再將7入棧
c.接下來是×運算子,因此彈出7和5,計算出7×5=35,將35入棧
d.最後是-運算子,計算出35-6的值,即29,由此得出最終結果
1)中綴表示式就是常見的運算表示式,如(3+4)×5-6
2)中綴表示式的求值是我們人最熟悉的,但是對計算機來說卻不好操作(前面我們講的案例就能看的這
個問題),因此,在計算結果時,往往會將中綴表示式轉成其它表示式來操作(一般轉成字尾表示式.)
1)字尾表示式又稱逆波蘭表示式,與字首表示式相似,只是運算子位於運算元之後
2)中舉例說明:(3+4)×5-6對應的字尾表示式就是 3 4 + 5 × 6 –
3)字尾表示式的計算機求值
a.從左至右掃瞄表示式,遇到數字時,將數字壓入堆疊,遇到運算子時,彈出棧頂的兩個數,用運算子對
它們做相應的計算(次頂元素和棧頂元素),並將結果入棧.重複上述過程直到表示式最右端,最後運算
得出的值即為表示式的結果
b.例如: (3+4)×5-6 對應的字尾表示式就是 3 4 + 5 × 6 -,針對字尾表示式求值步驟如下:
a)從左至右掃瞄,將3和4壓入堆疊.
b)遇到+運算子,因此彈出4和3(4為棧頂元素,3為次頂元素),計算出3+4的值,得7,再將7入棧.
c)將5入棧.
d)接下來是×運算子,因此彈出5和7,計算出7×5=35,將35入棧.
e)將6入棧.
f)最後是-運算子,計算出35-6的值,即29,由此得出最終結果
減法是棧底-棧頂
//將乙個逆波蘭表示式,依次將資料和運算子放入到arraylist中
public
static list
getliststring
(string suffixexpression)
return arraylist;
}//完成對逆波蘭表示式的運算
public
static
intcalculate
(list
list)
else
else
if(item.
equals
("-"))
else
if(item.
equals
("*"))
else
if(item.
equals
("/"))
else
stack.
push
(res +"")
;}}//最後留在stack中的資料就是運算結果
return integer.
parseint
(stack.
pop());}}
中綴 字首 字尾互相轉換
中綴表示式 a b c d e 第一步 按照運算子的優先順序對所有的運算單位加括號 a b c d e 第二步 字首 把運算符號移動到對應的括號前面 a bc de 把括號去掉 a bc de 字首表示式 字尾 把運算符號移動到對應的括號後面 a bc de 把括號去掉 abc de 字尾表示式 從...
中綴轉字尾和字首
中綴轉字尾 include using namespace std bool isoperator char ch intgetpriority char ch return level string postorder void trans string inorder s.pop else el...
c 實現中綴轉字首,中綴轉字尾,字尾表示式求值
思想 用兩個棧實現,規則如下 1 初始化兩個棧 運算子棧s1和儲存中間結果的棧s2 2 從右至左掃瞄中綴表示式 3 遇到運算元時,將其壓入s2 4 遇到運算子時,比較其與s1棧頂運算子的優先順序 4 1 如果s1為空,或棧頂運算子為右括號 則直接將此運算子入棧 4 2 否則,若優先順序比棧頂運算子的...