棧結構,通俗易懂,特色:先進後出,後進先出。ios
如下,僅對於棧結構經常使用的操做進行實現數組
包括:數據結構
入棧(push),出棧(pop),判空(empty),棧頂元素(GetTop)
ide
#include <iostream> using namespace std; template<class T> class Stack { public: Stack(T size) // 初始化數組大小 :top(0) //棧頂指針 , _size(size) { _array = new T[size]; // top指向最後一個元素時,再往下跳會越界,因此多開一個 } ~Stack() { if (_array) { delete[] _array; } } public: void Push(const T val) { if (top >= _size) { cout << "overflow" << endl; return; } else { _array[top] = val; top++; } } T Pop() { T ret; if (top < 0) { cout << "underflow" << endl; return -1; } else { top--; ret = _array[top]; } return ret; } bool isEmpty() { return top == 0; } T Top() { if (!isEmpty()) { return _array[top - 1]; } else { cout << "error:stack is empty!" << endl; } } void Show() { if (isEmpty()) { cout << "stack has no data!" << endl; return; } for (size_t i = 0; i < top; i++) { cout << _array[i] << " "; } cout << endl; } private: size_t top; size_t _size; T* _array; }; void Test() { Stack<int> stk(5); stk.Push(1); stk.Push(2); stk.Push(3); stk.Push(4); stk.Push(5); stk.Show(); cout << stk.Top() << endl; cout << stk.Pop() << endl; cout << stk.Pop() << endl; cout << stk.Pop() << endl; cout << stk.Top() << endl; stk.Show(); } int main() { Test(); system("pause"); return 0; }
棧結構是最簡單的數據結構,不少數據結構都會用到棧結構,因此簡單的棧結構經常使用的操做需掌握。spa
如有紕漏,歡迎指正
指針