//cirqueue.h
#ifndef CIRQUEUE_H
#define CIRQUEUE_H
#include <iostream>
using namespace std;
const int QueueSize=100;
template <class T>
class CirQueue
{
public:
CirQueue(){front=rear=QueueSize-1;}
void EnQueue(T x);
T DeQueue();
T GetQueue();
bool Empty(){ return front==rear?1:0;}
void print();
T GetRear();
private:
T data[QueueSize];
int front,rear;
};
template <class T>
void CirQueue<T>::EnQueue(T x)
{
if((rear+1)%QueueSize==front) throw "上溢";
rear=(rear+1)%QueueSize;
data[rear]=x;
}
template <class T>
T CirQueue<T>::DeQueue()
{
if(rear==front) throw "下溢";
front=(front+1)%QueueSize;
return data[front];
}
template <class T>
T CirQueue<T>::GetQueue()
{
if(rear==front) throw "下溢";
int i=(front+1)%QueueSize;
return data[i];
}
template <class T>
void CirQueue<T>::print()
{
for(int i=(front+1)%QueueSize;i<=rear;i++)
cout<<data[i]<<" ";
cout<<endl;
}
template <class T>
T CirQueue<T>::GetRear()
{
if(rear==front) throw "下溢";
return data[rear];
}
#endif
//main.cpp
#include "cirqueue.h"
void main()
{
int a[5]={1,2,3,4,5};
CirQueue<int> cir;
for(int i=0;i<5;i++)
cir.EnQueue(a[i]);
cout<<"该循环队列为:";
cir.print();
cout<<"取队列队头元素:"<<cir.GetQueue()<<endl;
cout<<"取队列队尾元素:"<<cir.GetRear()<<endl;
cout<<"分别执行两次出队函数,出队的元素分别为:\n"<<cir.DeQueue();
cout<<" "<<cir.DeQueue()<<endl;
cout<<"此时循环队列为空吗?"<<endl;
if(cir.Empty()) cout<<"是"<<endl;
else cout<<"不是"<<endl;
cout<<"此时循环队列为:";
cir.print();
}
结果图: