循环队列

#include<iostream>

using namespace std;
template<class T>
class SqQueue
{
 protected:
  int front,rear;
  int maxSize;
  T *elem;
 public:
  SqQueue(int size);
  ~SqQueue();
  void Init();
  int Length();//
  bool Empty(){ return front == rear; };//假定当front==rear时,队列为空
  bool Full(){
  return Length() == maxSize-1; //当front 在rear下一个时就为满
  };
  void Traverse();
  bool OutQueue(T &e);
  bool InQueue(const T &e);
  T GetHead(T e);
  SqQueue(const SqQueue<T> &copy);
  SqQueue<T> & operator =(const SqQueue<T>&copy);
};


template<class T>
SqQueue<T>::SqQueue(int size)
{
  maxSize = size;
  elem = new T[maxSize];
  front = rear= 0;
}
template<class T>
SqQueue<T>::~SqQueue()
{
  delete []elem;
}

template<class T>
void SqQueue<T>::Init()
{
  front = rear = 0;
  if (elem != NULL) delete elem;

}

template<class T>
int SqQueue<T>::Length()
{
  return (rear - front + maxSize) % maxSize;
}
template<class T>
void SqQueue<T>::Traverse()
{
  for (int i = front; i != rear; i = (i + 1) % maxSize)
    cout << elem[i];
}
template<class T>
bool SqQueue<T>::OutQueue(T &e)
{
    if (!Empty())
    {
      e = elem[front];
      front= (front + 1) % maxSize;
      return true;

    }
    else
    {
    return false;
    }
}
template<class T>
bool SqQueue<T>::InQueue(const T &e)
{
    if (!Full())
    {
      elem[rear] =e;
      rear = (rear + 1) % maxSize;
      return true;

    }
    else
    {
    return false;
    }
}

template<class T>
T SqQueue<T>::GetHead(T e)
{
  if (!Empty())
  {
  e = elem[front];
  return e;
  }
}

template<class T>
SqQueue<T>::SqQueue(const SqQueue<T> &copy)
{
  Init();
  front = copy.front;
  rear = copy.rear;
  maxSize = copy.maxSize;
  elem = new T[maxSize];
  for (int i = front; i != rear; i = (i + 1) % maxSize)
    InQueue(copy.elem[i]);
}
template<class T>

SqQueue<T> & SqQueue<T>::operator =(const SqQueue<T>&copy)
{
  if (copy != this)
  {
  Init();
  front = copy.front;
  rear = copy.rear;
  maxSize = copy.maxSize;
  elem = new T[maxSize];
  for (int i = front; i != rear; i = (i + 1) % maxSize)
    InQueue(copy.elem[i]);
  return *this;
}
}

 

#include"SqQueue.h"
using namespace std;
int main()
{
  SqQueue<int> sq(5);
  int a;
  sq.InQueue(1);
  sq.InQueue(2);
  sq.InQueue(3);
  sq.OutQueue(a);
  sq.Traverse();
  cin.get();
}

posted @ 2016-05-31 17:03  ranran1203  阅读(153)  评论(0)    收藏  举报