學習筆記 字首,中綴,字尾 字尾實現綜合計算器

2021-10-08 14:17:23 字數 1938 閱讀 3045

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 否則,若優先順序比棧頂運算子的...