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