表示式的計算 鏈棧表示

2021-04-27 21:16:23 字數 1646 閱讀 1104

注:此**只能完成簡單的加減乘除四則運算,但是不支援單目運算,更複雜的形式留待以後有時間再進一步完善。

#include

"linkedstack.h"

#include

class

calculator

void

run();

//執行表示式計算

void

clear();

//清棧

private:

void

addoperand(double

value);

//運算元進棧

bool

get2operands(double & left,double & right);

//從棧中退出兩個運算元

void

dooperator(char

op);

//形成運算指令,進行計算

intisp(char

ch);

//判斷操作符的棧內優先數

inticp(char

ch);

//判斷操作符的棧外優先數

linkedstack

s;//棧物件定義,用於字尾表示式的計算過程,儲存運算元

linkedstack

t;//棧物件定義,用於中綴表示式轉後續表示式的過程,儲存操作符};

//讀字串並求乙個字尾表示式的值,以字元'#'結束

void

calculator::run()

else

else

if (isp(ch1)>icp(ch))

//新輸入操作符優先順序低 }

else

//輸入操作符優先順序等於棧頂優先順序 }

}assert(!s.isempty());

double

temp;

s.pop(temp);

cout

<<"the result is:"

<

void

calculator::clear()

//取兩個運算元,根據操作符op形成運算指令並計算

void

calculator::dooperator(char

op)

else

s.push(left/right);

break; }

}else

clear(); }

//從運算元棧中取出兩個運算元

bool

calculator::get2operands(double & left,double & right)

s.pop(right);

if(s.isempty())

s.pop(left);

return

true; }

//將運算元的值value進操作棧

void

calculator::addoperand(double

value)

intcalculator::isp(char

ch)

return -1; }

intcalculator::icp(char

ch)

return -1; }

計算表示式 棧

問題 現在有乙個合法的二進位制表示式,請計算出該表示式的值 input 輸入一行字串,表示乙個二進位制表示式。長度不超過 100,000 ouput 輸出表示式的值 input output 0 1 0 1 1 0 1 1 兩種方法 1 被動 遇到右括號再進行運算,直至左括號 include inc...

鏈棧(表示式求值)

include include includetypedef struct snode snode,linkstack int initstack linkstack s bool push linkstack s,char e 在棧頂插入元素e bool pop linkstack s,char ...

計算表示式值(字尾表示式) 棧

處理表示式主要是對優先順序以及括號的判斷 1.運算子棧頂的優先順序小於加入的時,需要將所有的不評級的取出並計算,2.當遇到 時,需要括號內的運算全部處理 2.其他情況全部加入運算子棧和資料棧 include include include using namespace std typedef lo...