循环队列
#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> ©);
SqQueue<T> & operator =(const SqQueue<T>©);
};
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> ©)
{
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>©)
{
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();
}

浙公网安备 33010602011771号