用棧來實現表示式的計算

2021-07-06 04:49:18 字數 1737 閱讀 5754

棧可以用來實現表示式的計算 分別用兩個棧來儲存運算符合運算數,預設#變成表示式的結束操作,現在運算子棧中放入乙個#建,以便於後面的匹配,然後遍歷

字串,若是運算子,則與運算子的頭元素進行比較,優先順序高,則運算數拿出兩個,與運算子的頭元素進行運算,隨後入運算數的棧,在這裡沒搞明白為什麼這個】

遍歷到的字串不用入運算子的棧,若是等於,則表示括號匹配,運算子裡面出乙個元素,若是小於,則運算子入棧,總體就是這麼乙個流程

#include#include#include#includeusing namespace std;

stackoptr;//用於寄存運算子

stackopnd;//用於寄存運算元或運算結果,運算結果有可能是浮點數

string exepression;//用於存放表示式

//比較運算子的優先順序

char compare(char a, char b) //返回兩算符a和b的優先順序關係

//用於計算數值,隨後放回棧中

double calculate(double a, double b, char fuhao)

}//在字串中找是不是數字還是運算子

bool isoptr(char c)

//用於計算的過程 核心** 用於求值的過程

double evaluateexpression()

opnd.push(num);

} else

} }//最後放入#已進行匹配,來匹配運算子的結束

optr.push('#');

double res = opnd.top();

opnd.pop();

return res;

}int main()

先貼上自己的**,但有bug,以後再改

然後貼上正確的**

#include #include #include #include using namespace std;

stackopnd; //運算元棧

stackoptr; //算符棧

char expression[100]; //用於盛放表示式

char compare(char a, char b); //返回兩算符a和b的優先順序關係

int calculate(int a, int b, char op); //返回計算結果

int evaluateexpression(); //求值過程

bool isoptr(char c); //是否是算符

int main()

int calculate(int a, int b, char op) //返回計算結果

}bool isoptr(char c)

int evaluateexpression() //求值過程

opnd.push(num);

}else}}

optr.push('#'); //在表示式最左邊增設乙個'#'構成整個表示式的一對'#'

int res=opnd.top();

opnd.pop();

return res;

}

很奇怪的是在vs上面竟然不能執行,但在dev上能執行

用棧實現表示式計算

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

用棧實現表示式計算 C

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

用棧計算表示式

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