首页 > 代码库 > c++用双向链表实现栈(带形象显示)

c++用双向链表实现栈(带形象显示)

 

//可直接编译运行,其中方法status为形象的显示出栈的结构:

技术分享

  1 // visual stack , need define "cout<<"   2   3 #include <iostream>  4 using std::cout;  5   6 template<typename T>  7 struct item  8 {  9     item():value(),last(NULL),next(NULL){} 10     item *last,*next; 11     T value; 12 }; 13 template<typename T> 14 class Stack 15 { 16     public: 17         Stack():m_size(0),m_bottom(NULL),m_top(NULL){} 18         int size(); 19         bool push(const T&); 20         T pop(); 21         T top(); 22         bool empty(); 23         void status(); 24     private: 25         item<T> *m_bottom,*m_top; 26         int m_size; 27 }; 28  29  30 /////////////////// 31 int main() 32 { 33     Stack<int> st; 34     for(int i=0;i<10;i++) 35     { 36         st.push(i); 37         st.status(); 38     } 39     cout<<"size="<<st.size()<<"\n"; 40      41     for(    i=0;i<10;i++) 42     { 43         st.pop(); 44         st.status(); 45     } 46     if(st.empty())cout<<"empty\n"; 47     cout<<st.top()<<"\n"; 48     return 0; 49 } 50  51  52 //////////////////////////// 53 template<typename T> 54 inline int Stack<T>::size(){return m_size;} 55  56 template<typename T> 57 inline bool Stack<T>::empty(){return m_size==0?false:true;} 58  59 template<typename T> 60 inline T Stack<T>::top(){return m_size!=0?m_top->value:T();} 61  62 template<typename T> 63 bool Stack<T>::push(const T& t) 64 { 65     if(m_size==0) 66     { 67         m_bottom=new item<T>; 68         m_bottom->value=http://www.mamicode.com/t; 69         m_top=m_bottom; 70     } 71     else 72     { 73         m_top->next=new item<T>; 74         m_top->next->value=http://www.mamicode.com/t; 75         m_top->next->last=m_top; 76         m_top=m_top->next; 77     } 78     m_size++; 79     return true; 80 } 81  82 template<typename T> 83 T Stack<T>::pop() 84 { 85     if(m_size==1) 86     { 87         T t=m_top->value; 88         delete m_top; 89         m_bottom=m_top=NULL; 90         m_size=0; 91         return t; 92     } 93     else if(m_size==0) 94     { 95         return T(); 96     } 97     else  98     { 99         T t=m_top->value;100         m_top=m_top->last;101         delete m_top->next;102         m_top->next=NULL;103         m_size--;104         return t;105     }106     return T();107 }108 109 template<typename T>110 void Stack<T>::status()111 {112     item<T> *p;113     cout<<"栈顶  |\n";114     if( m_size==0 )return ;115     else if(m_size<10)116     {117         for(p=m_top;p!=NULL;p=p->last)118         {    119             if(p->last==NULL)cout<<"栈底  |"<<p->value<<"|\n";120             else cout<<"      |"<<p->value<<"|\n";121         }122     }123     else 124     {125         int i;126         for(p=m_top,i=0;i<4;p=p->last,i++)cout<<"      |"<<p->value<<"|\n";127         for(p=m_bottom,i=0;i<4;p=p->next,i++);128         cout<<"      略...\n";129         for(;i>=0;i--,p=p->last)130         {131             if(i==0)cout<<"栈底  |"<<p->value<<"|\n";132             else cout<<"      |"<<p->value<<"|\n";133         }134     }135 }

 

c++用双向链表实现栈(带形象显示)