資料結構與演算法系列 棧在表示式求值中的應用

2021-10-05 22:52:00 字數 1025 閱讀 2143

題目

利用計算機計算算數表示式,只包含加減乘除四則運算,比如:34+13*9+44- 12/3

思路:通過兩個棧來實現的。其中乙個儲存運算元的棧,另乙個是儲存運算子的棧。我們從左向右遍歷表示式,當遇到數字,我們就直接壓入運算元棧;當遇到運算子, 就與運算子棧的棧頂元素進行比較。如果比運算子棧頂元素的優先順序高,就將當前運算子壓入棧;如果比運算子棧頂元素的優先 級低或者相同,從運算子棧中取棧頂運算子,從運算元棧的棧頂取 2 個運算元,然後進行 計算,再把計算完的結果壓入運算元棧,繼續比較。

public class stacktest 

return result;

}/**

*  利用計算機計算算數表示式,只包含加減乘除四則運算,比如:34+13*9+44- 12/3

** 思路:通過兩個棧來實現的。其中乙個儲存運算元的棧,另乙個是儲存運算子的棧。

* 我們從左向右遍歷表示式,當遇到數字,我們就直接壓入運算元棧;當遇到運算子,

* 就與運算子棧的棧頂元素進行比較。如果比運算子棧頂元素的優先順序高,就將當前運算子壓入棧;

* 如果比運算子棧頂元素的優先 級低或者相同,從運算子棧中取棧頂運算子,從運算元棧的棧頂取 2 個運算元,

* 然後進行 計算,再把計算完的結果壓入運算元棧,繼續比較。

*/@test

public void test1()

}else else if((str.charat(i) == '+' || str.charat(i) == '-')

&&(symbol.peek() == '*' || symbol.peek() == '/'))else }}

//對資料棧與運算子棧中剩餘元素進行計算

while (symbol.size() > 0)

system.out.println("計算結果:"+result);

}}

輸出結果:

計算結果:191

資料結構與演算法系列 棧 順序棧

棧的定義 棧又稱堆疊,是一種特殊的線性表 限制 先進後出 允許插入和刪除的一端叫做變化的一端 稱為棧頂,棧頂元素 棧底。比如把子彈壓入彈夾,裡面的子彈就是先進後出。棧的順序儲存結構 簡稱順序棧,它是利用一組位址連續的儲存單元依次存放自棧底到棧頂的資料元素。順序棧的定義及相關操作。include de...

C 資料結構與演算法系列 四 棧

棧 stack 在電腦科學中是限定僅在表尾進行插入或刪除操作的線形表。它按照後進先出的原則儲存資料,先進入的資料被壓入棧底,最後的資料在棧頂,需要讀資料的時候從棧頂開始彈出資料 最後乙個資料被第乙個讀出來,它只能在某一端插入和刪除的特殊線性表。用桶堆積物品,先堆進來的壓在底下,隨後一件一件往堆。取走...

C 資料結構與演算法系列(八) 棧(Stack)

棧是乙個先入後出 filo first in last out 的有序列表 根據棧的定義可知,最先放入棧中的元素在棧底,最後放入的元素在棧頂,而刪除元素剛好相反,最後放入的元素最先刪除,最先放入的元素最後刪除 子程式的呼叫 在跳往子程式前,會先將下乙個指令的位址存入堆疊中,直到子程式執行完後再將位址...