头文件:
#pragma once
// 用数组实现环形队列
template<typename T>
class Queue
{
public:
Queue(int capcity);
~Queue();
void ClearQueue();
bool isEmpty();
bool isFull();
int QueueLength();
void EnQueue(T e);
void DeQueue();
void PrintQueue();
private:
T* elemArray;
int front;
int rear;
int capticy;
};
实现文件:
#include "queue.h"
#include <iostream>
using namespace std;
template<typename T>
Queue<T>::Queue(int capcity)
{
this->capticy=capcity;
elemArray=new T[this->capticy];
front=rear=0;
}
template<typename T>
Queue<T>::~Queue()
{
delete[] elemArray;
}
template<typename T>
void Queue<T>::ClearQueue()
{
front=rear=0;
}
template<typename T>
bool Queue<T>::isEmpty()
{
return front==rear?true:false;
}
template<typename T>
bool Queue<T>::isFull()
{
if ((rear+1)%capticy==front)
return true;
return false;
}
template<typename T>
int Queue<T>::QueueLength()
{
return (rear-front+capticy)%capticy;
}
template<typename T>
void Queue<T>::EnQueue(T e)
{
if (isFull())
{
cout<<"The queue is full"<<endl;
return;
}
elemArray[rear]=e;
rear=(rear+1)%capticy;
}
template<typename T>
void Queue<T>::DeQueue()
{
if (isEmpty())
{
cout<<"The queue is empty"<<endl;
return;
}
front=(front+1)%capticy;
}
template<typename T>
void Queue<T>::PrintQueue()
{
if (isEmpty())
{
cout<<"The queue is empty"<<endl;
return;
}
if (rear<front)
{
for (int i=front;i<capticy;i++)
{
cout<<elemArray[i]<<" ";
}
for (int i=0;i<rear;i++)
{
cout<<elemArray[i]<<" ";
}
}
else
{
for (int i=front;i<rear;i++)
{
cout<<elemArray[i]<<" ";
}
}
cout<<endl;
}