C 用棧計算表示式

2021-06-28 16:46:26 字數 1227 閱讀 9956

基本思路:

(1)設定兩個棧,乙個運算子棧,乙個運算元棧。初始化後將

"#"壓入操作符棧中。

(2)順序掃瞄

,當輸入為運算元時就將其壓入運算元棧。

當輸入為運算子時,則比較輸入運算子和運算子棧的棧頂運算子的優先順序的大小。若輸入運算子的優先順序高於運算子棧頂運算子的優先順序時,則將其壓入到運算子棧;若運算子棧頂運算子的優先順序高於輸入運算子的優先順序,則將棧中的運算子彈出並從運算元棧中彈出兩個運算元進行運算,將運算結果作為運算元輸出到運算元棧;然後重新比較輸入運算子和更新後的棧頂運算子的優先順序的大小。注意:『(』進棧之前優先順序最高,但進棧之後其優先順序最低,只有』)『可使其出棧。

(7)掃瞄結束後,通過判斷操作符棧中是否只有』#『判斷是否計算完成。

舉例:例如計算表示式1+(2*3+4)/2

#include#include#includeusing namespace std;

int priority(int state,char a)

return result;

}double calculate(char op, double op1, double op2)

return result;

}int main()

double a = atof(num.c_str());//string->double

operand.push(a);//運算元入棧

num.clear();//num清空以備下次使用

i--;//位置還原

}else if (s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/' || s[i] == '(')

operation.push(s[i]);//不要忘了最後操作符入棧}}

else if (s[i] == ')')

operation.pop();//『(』出棧

}else

} while (operation.top() != '#')

cout << operand.top() << endl;//輸出結果

用棧計算表示式

首先宣告我們的表示式 expression 只是簡單的四則運算,再加上小括號.運算元operand,操作符operator 如果直接給出字尾表示式 postfix,也叫逆波蘭式 是最容易計算的,這種表示式中已經不含括號.方法 遇到運算元時壓入棧中 遇到操作符時從棧中彈出兩個元素進行此運算,再將運算結...

用棧計算表示式

首先宣告我們的表示式 expression 只是簡單的四則運算,再加上小括號.運算元operand,操作符operator 如果直接給出字尾表示式 postfix,也叫逆波蘭式 是最容易計算的,這種表示式中已經不含括號.方法 遇到運算元時壓入棧中 遇到操作符時從棧中彈出兩個元素進行此運算,再將運算結...

用棧實現表示式計算 C

思路 1.首先建立倆個棧,乙個存資料 datastack 另乙個存運算子 operatorstack 2.表示式計算 資料 datasatck,運算子 operatorstack if 當運算子棧為空時 將第乙個運算子放入棧中 else if 此時的運算子的優先順序 棧頂的運算子優先順序 運算子入棧...