棧的應用 Dijkstra雙棧演算法表示式求值演算法

2021-06-22 18:41:54 字數 639 閱讀 6156

表示式由括號、運算符合運算元(數字)組成。我們根據以下4種情況從左到右逐個將這些實數送入棧處理:

1、將運算元壓入運算元棧;

2、將運算子壓入運算子棧;

3、忽略左括號;

4、在遇到右括號時,彈出乙個運算子,彈出所需數量的運算元,並將運算子和運算元的運算結果壓入運算元棧。

在處理完最後乙個右括號之後,運算元棧上只會有乙個值,它就是表示式。這種方法乍一看有些難以理解,但要證明它能夠計算得到正確的值很簡單:每當演算法遇到乙個被括號包圍並由乙個運算子和兩個運算元組成的子表示式時,它都將運算子和操作室的計算結果壓入運算元棧。這樣的結果就好像在輸入中用這個值代替了該子表示式,因此用這個值代替子表示式得到的結果和原表示式相同。我們可以反覆應用這個規律並得到乙個最終值。

下面的evaluate類是該演算法的乙個實現。這段**是乙個簡單的「直譯器」:乙個能夠解釋給定字串所表達的運算並計算得到結果的程式。

以式子(1+((2+3)*(4+5)))為例,下面展示一下該演算法執行時的軌跡圖:

Dijkstra雙棧演算法

package com.dijkstra import com.stack.arraytostack 利用2個棧實現簡單的運算操作 dijkstra雙棧演算法 1 將運算元壓入運算元棧 2 將運算子壓入運算子棧 3 忽略左括號 4 在遇到右括號時,彈出乙個運算子,彈出所需數量的運算元,並將運算子和運...

棧的應用 表示式求值(雙棧)

中綴表示式是正常的表示式形式,例如 4.99 1.06 5.99 6.99 1.06 字尾表示式是針對中綴表示式而言的,可以理解為 操作符在兩個運算元之後。例如 4.99 1.06 5.99 6.99 1.06 表示式的求值規則為 設兩個棧,n,o,分別儲存運算元和操作符。從左到右掃瞄中綴表示式 遇...

Dijkstra的雙棧算數表示式求值演算法

說明 這個演算法的輸入要求是必須補全所有括號,否則演算法會出錯,數字和符號之間應該留有乙個空格。import edu.princeton.cs.algs4.stack import edu.princeton.cs.algs4.stdin import edu.princeton.cs.algs4....