1.棧的類模板:
#ifndef stack_h
#define stack_h
#include template class stack ;
//模板的實現
template stack::stack() : top(-1)
template void stack::push(const t &item)
template t stack::pop()
template const t &stack::peek() const
template bool stack::isempty() const
template bool stack::isfull() const
template void stack::clear()
#endif //stack_h
2.用棧模板實現乙個計算器:
實現乙個簡單的整數計算器,能夠進行加、減、乘、除和乘方運算。使用時算式採用字尾輸入法,每個運算元、操作符之間都以空白符分隔。例如,若要計算"3+5"則輸入"3 5 +"。乘方運算子用"^"表示。每次運算在前次結果基礎上進行,若要將前次運算結果清除,可鍵入"c"。當鍵入"q"時程式結束。
計算器類定義如下:
#ifndef calculator_h
#define calculator_h
#include #include #include #include "stack.h" // 包含棧類模板定義檔案
using namespace std;
class calculator ;
//工具函式,用於將字串轉換為實數
inline double stringtodouble(const string &str)
void calculator::enter(double num)
bool calculator::gettwooperands(double &opnd1, double &opnd2)
opnd1 = s.pop(); //將右算子彈出棧
if (s.isempty())
opnd2 = s.pop(); //將左算子彈出棧
return true;
}void calculator::compute(char op)
else
s.push(operand2 / operand1);
break;
case '^': s.push(pow(operand2, operand1)); break;
default: cerr << "unrecognized operator!" << endl;
break;
} cout << "= " << s.peek() << " "; //輸出本次運算結果
} else
s.clear(); //運算元不夠,清空棧
}void calculator::run() }}
void calculator::clear()
#endif //calculator_h
3.測試函式:
#include #include "calculator.h"
using namespace std;
int main()
測試結果:
來自清華大學mooc課件
棧及其應用
棧又稱堆疊,是一種運算受限的線性表,其限制是僅允許在表的一端進行插入和刪除運算。把對棧進行運算的一端稱為棧頂,另一端稱為棧底。向乙個棧插入新元素稱為入棧或進棧,push 從乙個棧刪除元素稱為退棧或出棧,pop。因為後進棧的元素必定先出棧,所以又把棧稱為後進先出表 last in first out,...
棧及其簡單應用
棧是一種特殊的線性表 是一種先進後出表 filo 只有棧頂元素才能被操作 特殊 棧具有特殊的儲存訪問結構 棧的操作 入棧 向棧中儲存資料元素 push 出棧 從棧中取出元素 pop 棧頂指標 top 用來指向最後乙個入棧元素 棧滿 上溢 不可入棧 top size 1 入棧操作 top top 1 ...
棧操作及其應用
棧可以是順序棧,也可以是鏈棧。順序棧 1 const int maxsize 100 2 順序棧 3struct sqstack78 void initstack sqstack s 912 13int isempty sqstack s 1420 21int push sqstack s,int ...