一、通過棧把中綴表示式轉換為字尾表示式的步驟:
從左至右掃瞄中綴表示式,
if(遇到數字)else if(遇到 『(』 )else if(遇到 『)』 )else if(遇到運算子op)elseelseelse if(遇到操作符op);//()1 +-*/-//型別標記
//enum設定預設值10,20是為了區分+- */ -(負號),使得相差較大,便於區別
static maptagpair;//maptag
typedef std::pairexptype;//型別,如<'+',add>
static bool iserror;//出錯標識
//------------test
public:
static void display(const string & s,const vector& x)
private:
static bool isvalidexpress(const string & cppstring)
static void strtoexpress(const string & cppstring,vector& express)else if(interm.second == rb)else
}}else if(interm.second == lb)else
stk.push(interm);}}
while(!stk.empty())
} static double calcexpressprocess(const vector& postexp)elseelse
}double val = 0;
switch(postterm.second)
calcstk.push(val);}}
}if(calcstk.size() != 1)
return calcstk.top();
}};bool calcexpress::iserror = false;
int main()
字尾表示式計算
演算法 1.遍歷字尾表示式中的數字和符號 對於數字 進棧 對於符號 從棧中彈出右運算元 從棧中彈出左運算元 根據符號進行運算 將運算結果壓入棧中 2.遍歷結束 棧中的唯一數字為計算結果 include include linkstack.h int isnumber char c int isope...
字尾表示式計算
將中綴表示式轉換為字尾表示式 與轉換為字首表示式相似,遵循以下步驟 1 初始化兩個棧 運算子棧s1和儲存中間結果的棧s2 2 從左至右掃瞄中綴表示式 3 遇到運算元時,將其壓入s2 4 遇到運算子時,比較其與s1棧頂運算子的優先順序 4 1 如果s1為空,或棧頂運算子為左括號 則直接將此運算子入棧 ...
字尾表示式計算
字尾表示式這樣一種型別的表示式,運算元在前,操作符在後。例如這樣的一位數字尾表示式 32 5 4 對等的四則表示式為 3 2 5 4。試編寫程式,求解乙個一位數的字尾表示式計算,表示式支援 操作,其中 為整除。輸入 表示式輸出 計算值樣例輸入 32 5 4 樣例輸出 21提示 可使用棧 解題關鍵 1...