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

2021-07-07 08:59:42 字數 1133 閱讀 2085

例如有表示式:9+(3-1)*3+10/2  這樣叫做中綴表示式

如果用棧來解決這類問題,需要先變成字尾表示式(這是一種不需要括號的方法):" 9 3 1 — 3 * + 10 2  / +", 那怎麼求這個呢?

1.求字尾表示式:

將中綴表示式轉化為字尾表示式(棧用來進出運算的符號):

從左到右遍歷中綴表示式的每乙個數字和符號,若是數字就輸出,既成為字尾表示式的一部分,若是符號,則判斷其與棧頂符號的優先順序,是右括號或優先順序低於棧頂符號(乘除優先加減),則棧頂元素依次出棧並輸出,並將當前符號進棧,一直到最終輸出字尾表示式為止。(左右括號匹配後丟棄)

注意:加號遇到棧中的加號時,算棧中的加號優先順序高,所以棧中的加號出棧,新的加號入棧

2.表示式運算:將字尾表示式進行運算得出結果(棧用來進出運算的數字)

從左到右遍歷表示式的每個數字和符號,遇到是數字就進棧,遇到是符號,就將處於棧頂兩個數字出棧,進行運算,運算結果進棧,一直到最終獲得結果。

下面是參照網上的**:

#include#include#include#includeusing namespace std;

stacks;

stackss;

int main()

} else

s.push(str1[i]);

} }

else

} } } }

if (s.size() != 0)

} cout << str2 << endl;

//由字尾表示式計算結果

int temp1, temp2, te***;

len2 = str2.length();

for (i = 0; i < len2; i++)

else

else if (str2[i] == '-')

else if (str2[i] == '*')

else if (str2[i] == '/')

ss.push(te***); }}

cout << ss.top() << endl;

} system("pause");

}

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

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

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

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

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

棧是計算機中非常基礎而又極其重要的一種資料結構,許多演算法的實現都離不開棧,它的特點是 先進後出 也可以說 後進先出 打乙個形象的比方 棧好比乙個彈夾,最先放入的子彈只能最後打出 而最後放入的子彈則最先打出。我們生活中接觸的表示式大部分都是中綴表示式,形如a b,這種表示式的特點是將運算子放在了運算...