資料結構與演算法之棧

2021-10-13 09:57:43 字數 1040 閱讀 8048

字首表示式

求值

從右至左掃瞄表示式,遇到數字時,將數字壓入堆疊,遇到運算子時,彈出棧頂的兩個數,用運算子對它們做相應的計算(棧頂元素 和 次頂元素),並將結果入棧;重複上述過程直到表示式最左端,最後運算得出的值即為表示式的結果

例如

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

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

2.遇到+運算子,因此彈出3和4(3為棧頂元素,4為次頂元素),3.計算出3+4的值,得7,再將7入棧

4.接下來是×運算子,因此彈出7和5,計算出7×5=35,將35入棧

5.最後是-運算子,計算出35-6的值,即29,由此得出最終結果

中綴表示式

1.中綴表示式就是常見的運算表示式,如(3+4)×5-6

2.中綴表示式的求值是我們人最熟悉的,但是對計算機來說卻不好操作(前面我們講的案例就能看的這個問題),因此,在計算結果時,往往會將中綴表示式轉成其它表示式來操作(一般轉成字尾表示式.)

字尾表示式

求值

從左至右掃瞄表示式,遇到數字時,將數字壓入堆疊,遇到運算子時,彈出棧頂的兩個數,用運算子對它們做相應的計算(次頂元素 和 棧頂元素),並將結果入棧;重複上述過程直到表示式最右端,最後運算得出的值即為表示式的結果

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

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

2.遇到+運算子,因此彈出4和3(4為棧頂元素,3為次頂元素),3.計算出3+4的值,得7,再將7入棧;

4.將5入棧;

5.接下來是×運算子,因此彈出5和7,計算出7×5=35,將35入棧;

6.將6入棧;

7.最後是-運算子,計算出35-6的值,即29,由此得出最終結果

《資料結構與演算法》之棧

資料結構與演算法 之鍊錶 資料結構與演算法 之佇列 資料結構與演算法 之排序 資料結構與演算法 之二分查詢 資料結構與演算法 之二叉樹 關於 棧 我有乙個非常貼切的例子,就是一摞疊在一起的盤子。我們平時放盤子的時候,都是從下往上乙個乙個放 取的時候,我們也是從上往下乙個乙個地依次取,不能從中間任意抽...

資料結構與演算法之棧

中綴表示式實現多位數的計算 實現 public class calculatordemo else 否則直接入符號棧 else 如果是數字直接入數棧 else else index if index expresion.length 表示式掃瞄完後就順序的從數棧和符號棧中pop出相應的數字和符號並執...

資料結構與演算法之棧

需求 大家看到,字尾表示式適合計算式進行運算,但是人卻不太容易寫出來,尤其是表示式很長的情況下,因此在開發中,我們需要將 中綴表示式轉成字尾表示式。演算法思路分析 1 初始化兩個棧 運算子棧s1和儲存中間結果的棧s2 2 從左至右掃瞄中綴表示式 3 遇到運算元時,將其壓s2 4 遇到運算子時,比較其...