問題描述:
輸入由整型分量和操作符組成的中綴表示式,輸出其字尾表示式和運算的結果。整型分量:十進位制數。操作符:( , ) , + , - , * , / 。
如輸入3*(5-8/2)+7,輸出 3 5 8 2 / - * 7 +,結果是10;
輸入3-(1/4+7)*3 ,輸出 3 1 4 / 7 + 3 * -,結果是 -18.75;
輸入3*4/5*(5-7)+4,輸出 3 4 * 5 / 5 7 - * 4 +,結果是-0.8。
注意:輸入的運算分量為十進位制數,輸出可能是小數。
問題分析:
中綴表示式難以直接求值,要通過轉化為其字尾表示式計算。轉化和求值過程都需要借助stl的stack來實現。
轉化:
1)順序掃瞄中綴表示式,
<1>如果它比棧頂的操作符優先順序高,或者它是左括號後的第乙個操作符,則將其壓入棧;
<2>否則(低或相等),將棧頂操作符彈出並輸出;
<3>繼續比較,如果它比新的棧頂操作符的優先順序高,跳到 2),否則,重複<2> <3>。
2)如果掃瞄到了中綴表示式的末尾,將棧中的剩餘的操作符全部彈出並輸出,否則重複 1)。
求值:
中綴表示式的求值需要其字尾表示式(可用char 型的陣列儲存)和乙個運算分量棧,借用字尾表示式求值也體現了其價值。
1)順序掃瞄字尾表示式,
當遇到運算分量時將其壓入運算分量棧;
當遇到運算子時,彈出兩個運算分量進行計算,並將結果壓棧。
2)當掃瞄到字尾表示式末尾再次計算結果時,棧頂元素就是所求表示式的值,否則,重複 1)。
c++ code:
#include #include using namespace std;
char suf_exp[100];//儲存字尾表示式
int z=0;//suf_exp的下標變數
bool cmp(char a,char b)
else//b的高
return false;
}void get_suf_exp(string s)
基於棧的中綴算術表示式求值
實驗目的 1.掌握棧的基本操作演算法的實現,包括棧初始化 進棧 出棧 取棧頂元素等。2.掌握利用棧實現中綴表示式求值的演算法。實驗內容 問題描述 輸入乙個中綴算術表示式,求解表示式的值。運算子包括 參加運算的數為 double型別且為正數。要求 直接使用中綴算術表示式進行計算,不能轉換為字尾或字首表...
基於棧的中綴算術表示式求值
include include include include using namespace std typedef struct stacknode lstack 兩個棧,乙個是字元,乙個是數字,先判斷是什麼字元,然後呼叫不同的函式 typedef struct data struct stac...
java 棧實現中綴表示式求值
思路分析 利用棧這個資料結構先入後出的特點。利用兩個棧乙個數字棧,乙個符號棧。實現計算。1.遍歷表示式的每個字元,如果是數字就入數棧。注意數字可能是多位數,所以在讀數字是要合併一下連續的數字,知道下個符號出現。2.讀到的是符號時,先判斷符號棧是否為空,如果為空就直接入符號棧。如果不為空則判斷優先順序...