中綴表示式求值

2022-05-21 15:03:10 字數 1107 閱讀 6508

中綴表示式就是通用的算術或邏輯公式表示方法。

形如 \((1+2)-3\) ,\((a+b)\times c-d\) 等;

顯然用字串讀入後不便於計算結果,我們考慮把它轉為字尾表示式。

如:我們平時寫 \(a+b\),這是中綴表示式,寫成字尾表示式就是:\(ab+\) ,

\((a+b)*c-(a+b)/e\)的字尾表示式為: \(ab+c*ab+e/-\) 這樣做有什麼好處?

我們可以通過使用兩個棧(乙個儲存數值 \(q_1\),乙個儲存運算符號 \(q_2\))輕鬆求出結果

那麼如何得到字尾表示式?

更一般的,我們一般把求字尾表示式和計算同時進行,遍歷字串,如果是數字,直接放入 \(q_1\) ,如果是運算子,那麼我們不斷取出 \(q_2\) 棧頂的運算子與 \(s[i]\)比較(優先順序),如果 \(\geq\) 就拿出\(q_1\) 棧頂的兩個元素做\(q_2\) 棧頂的運算,直到 \(s[i]\) 為棧內優先順序最高的元素。最後得到的\(q_1\) 必然只有乙個元素即答案。

#include using namespace std;

const int n=110;

char s[n];

stackq1,q2;

int qpow(int a,int b)

return ans;

}int check(char c)

int calc(int x)

if(x==2)

return a+b;

if(x==1)

return a-b;

if(x==4)

return a*b;

if(x==3)

return a/b;

if(x==5)

}bool cmp(int x,int y)

int main()

if(!check(s[i-1]) && i)

if(y==-1)

continue;

}if(y!=-2)

}q1.push(y);

}printf("%d\n",q2.top());

return 0;

}

中綴表示式求值

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

中綴表示式求值

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

中綴表示式求值

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