用棧計算表示式

2022-05-03 03:15:11 字數 822 閱讀 6796

首先宣告我們的表示式(expression)只是簡單的四則運算,再加上小括號.

運算元operand,操作符operator

如果直接給出字尾表示式(postfix,也叫逆波蘭式)是最容易計算的,這種表示式中已經不含括號.方法:遇到運算元時壓入棧中;遇到操作符時從棧中彈出兩個元素進行此運算,再將運算結果壓入棧中.**如下:

#include#include#include#include#includeusing namespace std;

int main();

stacks;

string opt="+-*/";

size_t len=sizeof(postfix)/sizeof(string);

for(int i=0;i

但通常我們看到的形式都是中綴表示式,形如:a+b*c-(d*e+f)/g

我們可以先把中綴表示式轉換成字尾表示式再進行運算

#include#include#include#includeusing namespace std;

bool not_prio_than(string opt1,string opt2);

int main(); //a+b*c-(d*e+f)/g

//所有運算子

string opt="+-*/()";

//輸出佇列

queueoutput;

//計算過程中用到的棧

stackst;

size_t len=sizeof(infix)/sizeof(string);

for(int i=0;i=b?true:false;

}

用棧計算表示式

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

C 用棧計算表示式

基本思路 1 設定兩個棧,乙個運算子棧,乙個運算元棧。初始化後將 壓入操作符棧中。2 順序掃瞄 當輸入為運算元時就將其壓入運算元棧。當輸入為運算子時,則比較輸入運算子和運算子棧的棧頂運算子的優先順序的大小。若輸入運算子的優先順序高於運算子棧頂運算子的優先順序時,則將其壓入到運算子棧 若運算子棧頂運算...

用棧實現表示式計算

public class calculator public static inthandle string express else else else else int num integer.parseint keepnum keepnum numstack.push num index if...