在循环队列中,以front和length分别表示循环队列中的队头位置和队列中所含元素的个数。试完成循环队列判断队空、判断队满入队和出队函数的实现。
头文件
/*SeqQueue.h*/
#pragma once
#include<iostream>
using namespace std;
const int DEFAULT_SIZE = 100;
template<class DataType>
class SeqQueue {
protected:
DataType* elems; //指向动态内存分配的数组
int maxSize; //队列的容量
int front, rear; //队头与队尾指针
int length; //队列中所含元素的个数
public:
SeqQueue(int size = DEFAULT_SIZE);//构造函数
virtual ~SeqQueue(); //析构函数
bool IsEmpty() const; //判断队列是否为空
bool IsFull() const; //判断队满
int EnQueue(const DataType e); //入队
int DelQueue(DataType& e); //出队
};
函数实现
/*SeqQueue.cpp*/
#include"SeqQueue.h"
template<class DataType>
SeqQueue<DataType>::SeqQueue(int size) {
maxSize = size;
if (elems != NULL)
delete[]elems;
elems = new DataType[maxSize];
front = rear = 0;
}
template <class DataType>
SeqQueue<DataType>::~SeqQueue()
{
delete[]elems;
}
template<class DataType>
bool SeqQueue<DataType>::IsEmpty() const
{
return length == 0;
}
template<class DataType>
bool SeqQueue<DataType>::IsFull() const
{
return length == maxSize;
}
template<class DataType>
int SeqQueue<DataType>::EnQueue(const DataType e)
{
if (IsFull())
return 0;
else {
elems[(front + length) % maxSize] = e;
length++;
return 1;
}
}
template<class DataType>
int SeqQueue<DataType>::DelQueue(DataType& e)
{
if (!IsEmpty())
{
e = elems[front];
front = (front + 1) % maxSize;
length--;
return 1;
}
else
return 0;
}