1 #include<iostream> 2 template<class T> class LinkStack; 3 4 template<class T> class StackNode 5 { 6 private: 7 T data; 8 StackNode<T>* next; 9 public: 10 friend class LinkStack<T>; 11 StackNode(T item, StackNode<T>* n = NULL):data(item),next(n){} 12 T GetData(){ return data; } 13 }; 14 15 template<class T> 16 class LinkStack 17 { 18 private: 19 StackNode<T>* top; 20 public: 21 LinkStack<T>():top(NULL){} 22 ~LinkStack<T>() 23 { Destroy(); } 24 void Destroy(); 25 void Push(const T item); 26 T Pop(); 27 StackNode<T>* GetTop() const; 28 void disp(); 29 bool IsEmpty() const 30 { return top == NULL; } 31 }; 32 33 template<class T> 34 void LinkStack<T>::Push(const T item) 35 { top = new StackNode<T>(item,top); } 36 37 template<class T> 38 T LinkStack<T>::Pop() 39 { 40 if(IsEmpty()) 41 std::cout <<" Stack is empty " << std::endl; 42 T item = top->GetData(); 43 StackNode<T>* remove = top; 44 top = top->next; 45 delete remove; 46 return item; 47 } 48 49 template<class T> 50 StackNode<T>* LinkStack<T>::GetTop() const 51 { return top; } 52 53 template<class T> 54 void LinkStack<T>::disp() 55 { 56 StackNode<T>* temp = top; 57 std::cout << "*****显示数据*****" << std::endl; 58 while(temp) 59 { 60 std::cout << temp->GetData() << std::endl; 61 temp = temp->next; 62 } 63 std::cout << "*****显示完毕*****" << std::endl; 64 } 65 66 template<class T> 67 void LinkStack<T>::Destroy() 68 { 69 StackNode<T>* temp; 70 while(top) 71 { 72 temp = top; 73 top = top->next; 74 delete temp; 75 } 76 }
【动手敲代码】:链式栈(C++)
给梦想一点时间