中綴表示式求值的方法 棧

2022-08-21 04:45:14 字數 672 閱讀 6946

對於像是1+2的中綴表示式,我們可以輕鬆地運用**來算出結果。

但是對於1+(2^2)/3*4這樣的表示式,事情就變得有些複雜了...

對於上述的表示式,我們可以運用棧的相關知識來解決—建立兩個棧,棧1放數字,棧2放運算子;遇到數字時入棧1;遇到運算子時,若棧2為空,則pop出棧1中的兩個數運算,將運算完的結果壓入棧1;若棧2非空,則將當前運算子與棧2中棧頂的運算子進行比較優先順序,再進行下一步操作。**如下:

#include

#include

#include

#include

#define maxsize 50

using namespace std;

stacks1;

stacks2;

void calculate(char a)

if(a=='-')

if(a=='*')

if(a=='/')

if(a=='^')

}int main()

s1.push(num);

//cout《運用c++需要用到118行**,但是運用python,一行**就可以解決,python**如下:

print(eval(input().replace('/','//').replace('^','**')))

人生苦短,我用python。

中綴表示式求值

中綴表示式用於計算乙個表示式,比如計算器 就是這樣實現的 這兒是用棧的資料結構來實現的。首先輸入乙個字串,表示乙個表示式,然後用乙個棧儲存數字,另外乙個棧儲存符號 如果當前運算子優先順序比棧頂元素優先順序高,則入棧,若當前運算子優先順序小於等於棧頂運算子優先順序,則從數字棧中彈出兩個元素,從符號棧中...

中綴表示式求值

表示式求值都需要2個棧。乙個是符號棧,另乙個是數字棧。拿上面的字尾式45 來說,咱們剛才將表示式從4 5轉換到45 的過程是咱們一眼就能看出來的,但是計算機不能像咱們這樣做,因為他不會。他只會從表示式的開頭,順序掃瞄表示式的每乙個字元,它不能像咱們一樣 一眼就 看 出來。計算機是如何轉換的呢?1.從...

中綴表示式求值

計算 calc.cpp 問題描述 小明在你的幫助下,破密了ferrari設的密碼門,正要往前走,突然又出現了乙個密碼門,門上有乙個算式,其中只有 0 9 求出的值就是密碼。小明數學學得不好,還需你幫他的忙。用整數除法 輸入 輸入檔案calc.in共1行,為乙個算式。輸出 輸出檔案calc.out共1...