循环队列的简单构造(C++)

来源:互联网 发布:linux 硬盘空间扩容 编辑:程序博客网 时间:2024/04/23 15:33

这是简单的循环队列,采用数组来存储队列中的元素

template<class T>class Queue{public:      Queue(int sz=10);      ~Queue(){delete[]elements;}      bool EnQueue(const T&x);      bool DeQueue(T&x);      bool getFront(T&x);      void makeEmpty(){Front=rear=0;}      bool IsFull()const{      return ((rear+1)%maxSize==Front)?true:false;      };      bool IsEmpty(){return (rear==Front)?true:false;}      int getSize(){return (rear-Front+maxSize)%maxSize;}      friend ostream& operator<<(ostream& os, Queue<T>& Q);private:      int Front, rear;//队头删除,队尾插入      int maxSize;      T *elements;};template<class T>Queue<T>::Queue(int sz):Front(0),rear(0),maxSize(sz){      elements=new T[maxSize];      assert(elements!=NULL);}template<class T>//插入元素bool Queue<T>::EnQueue(const T&x){      if(IsFull())return false;      elements[rear]=x;      rear=(rear+1)%maxSize;      return true;}template<class T>//删除bool Queue<T>::DeQueue(T&x){      if(IsEmpty())return false;      x=elements[Front];      Front=(Front+1)%maxSize;      return true;}template<class T>bool Queue<T>::getFront(T&x){      if(IsEmpty())return false;      x=elements[Front];      return true;}template<class T>ostream& operator<<(ostream& os, Queue<T>& Q){      os<<"Front="<<Q.Front<<",rear"<<Q.rear<<endl;      for(int i=Q.Front;i!=Q.rear;i=(i+1)%Q.maxSize)            os<<i<<":"<<Q.elements[i]<<endl;      return os;}