链栈 尹成

来源:互联网 发布:大数据比赛 编辑:程序博客网 时间:2024/06/06 09:53

http://blog.csdn.net/itcastcpp/article/details/39271661


今天,我们一起用C++写链栈,具体如下。

LinkStack.h具体内容:

[cpp] view plain copy
  1. #include "StackNode.h"  
  2.   
  3. template<typename Type> class LinkStack{  
  4. public:  
  5.     LinkStack() :m_ptop(NULL){}  
  6.     ~LinkStack(){  
  7.         MakeEmpty();  
  8.     }  
  9.   
  10. public:  
  11.     void MakeEmpty();           //make the stack empty  
  12.     void Push(const Type item); //push the data  
  13.     Type Pop();                 //pop the data  
  14.     Type GetTop() const;        //get the data  
  15.     void Print();               //print the stack  
  16.   
  17.     bool IsEmpty() const{  
  18.         return m_ptop == NULL;  
  19.     }  
  20.   
  21. private:  
  22.     StackNode<Type> *m_ptop;  
  23. };  
  24.   
  25. template<typename Type> void LinkStack<Type>::MakeEmpty(){  
  26.     StackNode<Type> *pmove;  
  27.     while (m_ptop != NULL){  
  28.         pmove = m_ptop;  
  29.         m_ptop = m_ptop->m_pnext;  
  30.         delete pmove;  
  31.     }  
  32. }  
  33.   
  34. template<typename Type> void LinkStack<Type>::Push(const Type item){  
  35.     m_ptop = new StackNode<Type>(item, m_ptop);  
  36. }  
  37.   
  38. template<typename Type> Type LinkStack<Type>::GetTop() const  
  39. {  
  40.     if (IsEmpty()){  
  41.         cout << "There is no elements!" << endl;  
  42.         exit(1);  
  43.     }  
  44.     return m_ptop->m_data;  
  45. }  
  46.   
  47. template<typename Type> Type LinkStack<Type>::Pop()  
  48. {  
  49.     if (IsEmpty()){  
  50.         cout << "There is no elements!" << endl;  
  51.         exit(1);  
  52.     }  
  53.     StackNode<Type> *pdel = m_ptop;  
  54.     m_ptop = m_ptop->m_pnext;  
  55.     Type temp = pdel->m_data;  
  56.     delete pdel;  
  57.     return temp;  
  58. }  
  59.   
  60. template<typename Type> void LinkStack<Type>::Print(){  
  61.     StackNode<Type> *pmove = m_ptop;  
  62.     cout << "buttom";  
  63.     while (pmove != NULL){  
  64.         cout << "--->" << pmove->m_data;  
  65.         pmove = pmove->m_pnext;  
  66.     }  
  67.     cout << "--->top" << endl << endl << endl;  
  68. }  
StackNode.h具体内容:

[cpp] view plain copy
  1. template<typename Type> class LinkStack;  
  2.   
  3. template<typename Type> class StackNode{  
  4. private:  
  5.     friend class LinkStack < Type > ;  
  6.     StackNode(Type dt, StackNode<Type> *next = NULL) :m_data(dt), m_pnext(next){}  
  7.   
  8. private:  
  9.     Type m_data;  
  10.     StackNode<Type> *m_pnext;  
  11. };  
main.cpp具体内容:

[cpp] view plain copy
  1. #include <iostream>  
  2. using namespace std;  
  3. #include "LinkStack.h"  
  4. int main(){  
  5.     LinkStack<int> stack;  
  6.     int init[10] = { 1, 3, 5, 7, 4, 2, 8, 0, 6, 9 };  
  7.     for (int i = 0; i < 10; i++){  
  8.         stack.Push(init[i]);  
  9.     }  
  10.     stack.Print();  
  11.     cout << stack.Pop() << endl;  
  12.     stack.Print();  
  13.     cout << stack.GetTop() << endl;  
  14.     stack.Print();  
  15.     cout << stack.Pop() << endl;  
  16.     stack.Print();  
  17.     stack.MakeEmpty();  
  18.     stack.Print();  
  19.     cin.get();  
  20.     return 0;  
  21. }  

运行效果如图1所示:


                                                                                                                                   图1 运行效果