可直接编译运行,其中status()方法效果如图:
1 #include <iostream> 2 using std::cout; 3 4 template<typename T> 5 class Queue 6 { 7 public: 8 Queue(int maxn=1000):m_size(0),MAXN(maxn),m_front(0),m_rear(0){head=new T[maxn];} 9 int size()const{return m_size;} 10 bool empty()const{return m_size==0?false:true;} 11 T front()const{return m_size?head[m_front]:T();} 12 T back()const{return m_size?head[m_rear]:T();} 13 bool clear(){m_size=m_front=m_rear=0;delete []head;} 14 bool push(const T&); 15 T pop(); 16 void status(); 17 private: 18 int MAXN; 19 int m_front,m_rear; 20 T *head; 21 int m_size; 22 }; 23 24 25 int main() 26 { 27 Queue<char> q; 28 for(int i=0;i<10;i++) 29 q.push('a'+i); 30 q.status(); 31 cout<<" q.pop()="<<q.pop()<<" "; 32 33 34 return 0; 35 } 36 37 38 template<typename T> 39 bool Queue<T>::push(const T& t) 40 { 41 if( 0==m_size && NULL == head ) 42 {head=new T[MAXN];m_rear=m_front=0;} 43 if(m_size>=MAXN)return false; 44 else 45 { 46 head[m_rear]=t; 47 m_rear=(m_rear+1)%MAXN; 48 m_size++; 49 return true; 50 } 51 } 52 53 template<typename T> 54 T Queue<T>::pop() 55 { 56 if( 0==m_size )return T(); 57 else 58 { 59 int save=m_front; 60 m_front=(m_front+1)%MAXN; 61 m_size--; 62 return head[save]; 63 } 64 } 65 66 template<typename T> 67 void Queue<T>::status() 68 { 69 cout<<"队尾 | <<push "; 70 for(int i=0;i<m_size;i++) 71 { 72 if(m_size-1==i)cout<<"队首 |"<<head[(m_rear-i-1)%MAXN]<<"| >>pop "; 73 else cout<<" |"<<head[(m_rear-i-1)%MAXN]<<"| "; 74 } 75 }