照王晓东《数据结构》(C++语言版)上打的,以备留用。
1 #include <iostream> 2 using namespace std; 3 template<typename T> 4 class Queue{ 5 public: 6 Queue(int max=10000); 7 ~Queue(){delete [] que;} 8 bool empty()const {return que_front==que_rear;} 9 bool full()const {return (((que_rear+1)%max_size==que_front)?1:0);} 10 int size()const {return ((que_rear >que_front)?que_rear-que_front:que_rear-que_front+max_size);} 11 T front()const {return que[(que_front+1)%max_size];} 12 T back()const {return que[que_rear];} 13 Queue<T>& push(const T& x); 14 Queue<T>& pop(T& x); 15 private: 16 int que_front;//队首游标 17 int que_rear; //队尾游标 18 int max_size; //循环数组大小 19 T *que; //队列元素 20 }; 21 template <typename T> 22 Queue<T>::Queue(int max) 23 { 24 max_size=max+1;//采用满足max_size-1时full=true的方法。 25 que=new T[max_size]; 26 que_front=que_rear=0; 27 } 28 template <typename T> 29 Queue<T>& Queue<T>::push(const T& x) 30 { 31 if (full()) return *this; 32 que_rear=(que_rear+1)%max_size; 33 que[que_rear]=x; 34 return *this; 35 } 36 template <typename T> 37 Queue<T>& Queue<T>::pop(T& x) 38 { 39 if (empty()) return *this; 40 que_front=(que_front+1)%max_size; 41 x=que[que_front]; 42 return *this; 43 }