CirQueue.h
#ifndef CirQueue_H
#define CirQueue_H
const int QueueSize=100;
template<class DataType>
class CirQueue
{
public:
CirQueue();
~CirQueue(){}
void EnQueue(DataType x);
DataType DeQueue();
DataType GetQueue();
int Empty();
private:
DataType data[QueueSize];
int front,rear,i;
};
#endif
CirQueue.cpp
#include"CirQueue.h"
template<class DataType>
CirQueue<DataType>::CirQueue()
{
front=rear=QueueSize-1;
}
template<class DataType>
void CirQueue<DataType>::EnQueue(DataType x)
{
if((rear+1)%QueueSize==front)throw"上溢";
rear=(rear+1)%QueueSize;
data[rear]=x;
}
template<class DataType>
DataType CirQueue<DataType>::DeQueue()
{
if(rear==front)throw"下溢";
front=(front+1)%QueueSize;
return data[front];
}
template<class DataType>
DataType CirQueue<DataType>::GetQueue()
{
if(rear==front)throw"下溢";
i=(front+1)%QueueSize;
return data[i];
}
template<class DataType>
int CirQueue<DataType>::Empty()
{
if(front==rear)return 1;
else return 0;
}
CirQueue_main.cpp
#include<iostream>
using namespace std;
#include"CirQueue.cpp"
void main()
{
CirQueue<int>Q;
if(Q.Empty())
cout<<"队列为空"<<endl;
else
cout<<"队列非空"<<endl;
cout<<"元素10,15执行入队操作:"<<endl;
try
{
Q.EnQueue(10);
Q.EnQueue(15);
}
catch(char* wrong)
{
cout<<wrong<<endl;
}
cout<<"查看队头元素:"<<endl;
cout<<Q.GetQueue()<<endl;
cout<<"执行出队操作"<<endl;
try
{
Q.DeQueue();
}
catch(char* wrong)
{
cout<<wrong<<endl;
}
cout<<"查看队头元素:"<<endl;
cout<<Q.GetQueue<<endl;
}