下面代碼僅供本人複習資料結構所用,實用性N低,各位飄過吧~~哈哈:>
//// C++ 模版技術實現簡單順序棧. // #include <cstdlib>#include <iostream>#include <iomanip>#include <stdexcept>//// 順序棧類模版. //template <typename T>class Stack{private:int _top;size_t _size;T *_pStack;static const size_t _DEF_SIZE = 20;// // _MIN_TOP 不應為 size_t 類型.// 因為 size_t 類型與 int 類型變數比較時會將 int 類型轉換為 size_t 類型. //static const int _MIX_TOP = 0; public:Stack(const size_t size = _DEF_SIZE): _top(_MIX_TOP - 1), _size(size){ _pStack = new T[_size]; }~Stack(void){ delete[] _pStack; }bool isEmpty(void) const{ return _MIX_TOP > _top; }bool isFull(void) const{ return _size - 1 == _top; }T getTop(void) const{if (isEmpty()) {throw std::underflow_error("棧空下溢 !"); }return _pStack[_top]; }void push(const T &val){if (isFull()) {throw std::overflow_error("棧滿上溢 !");}_pStack[++_top] = val;}T pop(void){ if (isEmpty()) {throw std::underflow_error("棧空下溢 !");}return _pStack[_top--];}};//// 測試棧. // int main(void){const size_t MAX_SIZE = 20;Stack<int> stack(MAX_SIZE);std::cout << "棧" << (stack.isEmpty() ? "" : "不") << "為空白." << std::endl; std::cout << "棧" << (stack.isFull() ? "" : "不") << "為滿." << std::endl; for (size_t i = 0; i < MAX_SIZE; ++i){stack.push(i);std::cout << std::setw(3) << stack.getTop();}// stack.push(MAX_SIZE);std::cout << std::endl;std::cout << "棧" << (stack.isEmpty() ? "" : "不") << "為空白." << std::endl; std::cout << "棧" << (stack.isFull() ? "" : "不") << "為滿." << std::endl; for (size_t i = 0; i < MAX_SIZE; ++i){std::cout << std::setw(3) << stack.pop();}// std::cout << std::setw(3) << stack.pop();return EXIT_SUCCESS;}