棧(順序儲存)C++模板實現
阿新 • • 發佈:2019-01-29
#include <iostream> using namespace std; template <typename T> class stack{ private: int top; //棧頂指標 int maxLen; //棧最大長度 T *data; //用陣列來建立棧 public: stack(int top_ = -1 , int maxLen_ = 10):top(top_),maxLen(maxLen_){ data = new T[maxLen]; //長度為maxLen的動態陣列 } ~stack(){ delete [] data; //釋放動態陣列 } void Push(T x); //將x推進棧 void Pop(); //推出棧頂元素 T getPeek(); //讀棧頂元素 bool isEmpty(); //判斷棧是否為空 bool isFull(); //判斷棧是否滿 void printAll(); //列印整個棧 }; template <typename T> void stack<T>::Push(T x){ //將x推進棧,實現部分 if(isFull()) return; top++; data[top] = x; } template <typename T> void stack<T>::Pop(){ //推出棧頂元素,實現部分 if(isEmpty()) return; top--; } template <typename T> T stack<T>::getPeek(){ //獲得棧頂元素,實現部分 if(isEmpty()) return; return data[top]; } template <typename T> bool stack<T>::isEmpty(){ //判斷棧是否為空,實現部分 return top==-1; } template <typename T> bool stack<T>::isFull(){ //判斷棧是否滿,實現部分 return top==maxLen-1; } template <typename T> void stack<T>::printAll(){ //列印棧內元素,實現部分 if(isEmpty()) return; for(int i = 0; i <=top ; i++){ cout<<data[i]<<endl; } } void main(){ stack<int> a; //建立元素型別為int的棧物件 a.Push(1); //將1推進棧 a.Push(2); //將2推進棧 a.Push(3); //將3推進棧 a.Push(4); //將4推進棧 a.Push(5); //將5推進棧 a.Pop(); //彈出棧頂元素 a.printAll(); //列印棧內元素 }