棧的類模板及其應用

2021-07-03 07:54:38 字數 1833 閱讀 2424

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 ...