头文件:CircleQueue.hpp
#pragma once
#include<iostream>
using namespace std;
const int QueueSize = 8;
template<class T>
class CircleQueue
{
public:
CircleQueue() { front = rear = 0; }
void EnQueue(T d); //入队
T DeQueue(); //出队
int get_length(); //获取队列长度
T get_front(); //获取队头元素
private:
int front, rear;
T data[QueueSize];
};
template<class T>
void CircleQueue<T>::EnQueue(T d)
{
if ((rear + 1) % QueueSize == front)
throw "overflow error";
rear = (rear + 1) % QueueSize;
data[rear] = d;
}//入队
template<class T>
T CircleQueue<T>::DeQueue()
{
if (front == rear)
throw "underflow error";
front = (front + 1) % QueueSize;
return data[front];
}//出队
template<class T>
int CircleQueue<T>::get_length()
{
return ((rear - front + QueueSize) % QueueSize);
}//获取队列长度
template<class T>
T CircleQueue<T>::get_front()
{
if (front == rear)
throw "underflow error";
return data[(front + 1) % QueueSize];
}//获取队头元素
编写main函数测试:
#include"CircleQueue.hpp"
int main()
{
CircleQueue<int> q;
for (int i = 1; i < 8; i++)
{
q.EnQueue(i);
}
//EnQueue异常处理机制测试
try
{
q.EnQueue(8);
}
catch (const char* err)
{
cout << err << endl;
}
while (q.get_length())
cout << q.DeQueue() << endl;
//DeQueue异常处理机制测试
try
{
q.DeQueue();
}
catch (const char* err)
{
cout << err << endl;
}
//get_front异常处理机制测试
try
{
q.get_front();
}
catch (const char* err)
{
cout << err << endl;
}
return 0;
}
程序运行结果: