基本思路:
(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 此時的運算子的優先順序 棧頂的運算子優先順序 運算子入棧...