棧的應用 四則運算表示式求值

2021-08-05 20:05:52 字數 970 閱讀 4385

棧是計算機中非常基礎而又極其重要的一種資料結構,許多演算法的實現都離不開棧,它的特點是「先進後出」,也可以說「後進先出」。

打乙個形象的比方:棧好比乙個彈夾,最先放入的子彈只能最後打出;而最後放入的子彈則最先打出。

我們生活中接觸的表示式大部分都是中綴表示式,形如a + b,這種表示式的特點是將運算子放在了運算元之間,優點是便於人的理解,缺點是需要明確各種運算子的優先順序。

字尾表示式是將運算子放在兩個運算元之後,形如a b +,這種表示式對於計算機來說非常容易計算,因為只須從左往右運算即可,不必考慮運算子的優先順序。因此在計算機的實際運算中,採用的是字尾表示式的形式。

前面介紹了棧、中綴表示式以及字尾表示式的概念,現在我們就用棧這個資料結構來實現乙個基本的演算法——四則運算表示式的求值。下圖是實現這一演算法的總思路:

1. 第一遍掃瞄表示式時,遇到運算子則壓入棧中,遇到運算元則按順序取出,放入等待生成的字尾表示式中。

2. 若掃瞄運算子時遇到),說明棧中有(與之配對,此時應依次彈出運算子,放入等待生成的字尾表示式中,直到(從棧中彈出。

3. 若當前掃瞄的運算子優先順序低於棧頂運算子的優先順序,則應先彈出棧頂運算子,之後再把當前運算子壓入棧中。

接下來,我們來看乙個具體的例子。

4.1 中綴表示式轉字尾表示式

4.2 計算字尾表示式

通過這個例子,我們看到了棧結構的優點:能夠儲存當前的資料狀態,等下次要回過頭來處理這一資料時時,可以回到之前的狀態進行處理。

看完了這一演算法的基本實現,不妨思考下面幾道題目用棧求值的過程。

1. (a + b) * c + d

2. a + (b * c)

3. a * b + c

4. a + b * (c + d)

四則運算表示式求值(棧的應用)

1.前 中 字尾表示式的轉換 首先需要明白三者之間的轉換 自然表示式轉換為前 中 字尾表示式,其實是很簡單的。首先將自然表示式按照優先順序順序,構造出與表示式相對應的二叉樹,然後對二叉樹進行前 中 字尾遍歷,即得到前 中 字尾表示式。舉例說明將自然表示式轉換成二叉樹 a b c d 根據表示式的優先...

棧的應用 四則運算表示式求值

1 字尾表示法定義 所有的符號都是在要運算數字的後面出現。如 9 3 1 3 10 2的字尾表示法應該是9 3 1 3 10 2 2 字尾表示式計算結果 規則 從左到右遍歷表示式的每個數字和符號,遇到數字就進棧,遇到是符號,就將處於棧頂的兩個數字出棧,進行運算,運算結果進棧,一直到最終獲得結果。以9...

棧的應用 四則運算表示式求值

若要計算機具有處理標準表示式的能力,最重要的有兩步 1 將中綴表示式轉化為字尾表示式 2 將字尾表示式進行運算得出結果 中綴表示式 標準四則運算表示式,即 8 3 2 4 10 2 2 字尾表示式 所有的符號都是要在運算數字的後面出現。例 將 8 3 2 4 10 2 2 轉為字尾表示式為 8 3 ...