首页 > IT职业 > IT图书 > C++环形队列类模板 = =#
首先感谢 james_yuan 老师,C++一路跟着学过来!
环形队列类模板的实现如下(附带测试代码)
#ifndef CIRCULARQUEUE_H_INCLUDED
#define CIRCULARQUEUE_H_INCLUDED
#include
#include
using namespace std;
/**
* 环形队列类模板
*
*/
template
class CircularQueue{
public:
CircularQueue(int capacity);
virtual ~CircularQueue();
//清队
void clearQueue();
//入队
bool enQueue(T element);
//出队
bool deQueue(T &element); //传入一个T的引用,方便接队头,而不是返回队头,这样函数返回布尔,调用完毕后,引用拿到队头
//判空
const bool isEmpty();
//判满
const bool isFull();
//队长
const int length();
//列队
void printQueue(void(*pFunc)(T)); //适配所有模板类的打印,传入一个对应类型的打印函数指针
private:
//队列数组指针
T *m_pQueue;
//队列容量
int m_iCapacity;
//队头
int m_iHead;
//队尾
int m_iTail;
//队长
int m_iLength;
};
template
CircularQueue::CircularQueue(int capacity){
m_iCapacity = capacity;
clearQueue();
if ((m_pQueue = new T[m_iCapacity]) == NULL) {
throw string("Queue Initialization Failed!");
}
}
template
CircularQueue::~CircularQueue(){
delete []m_pQueue;
m_pQueue = NULL;
}
template
void CircularQueue::clearQueue(){
m_iHead = 0;
m_iTail = 0;
m_iLength = 0;
}
template
bool CircularQueue::enQueue(T element){
if (isFull()) {
return false;
}
m_pQueue[m_iTail] = element;
m_iLength++;
m_iTail++;
m_iTail = m_iTail % m_iCapacity;
return true;
}
template
bool CircularQueue::deQueue(T &element){
if (isEmpty()) {
return false;
}
//传入一个T的引用,方便接收队头,而不是返队头,这样函数返回布尔,调用完毕后,引用拿到队头
element = m_pQueue[m_iHead];
m_iLength--;
m_iHead++;
m_iHead = m_iHead % m_iCapacity;
return true;
}
template
const bool CircularQueue::isEmpty(){
return m_iLength == 0 ? true : false;
}
template
const bool CircularQueue::isFull(){
return m_iCapacity == m_iLength ? true : false;
}
template
const int CircularQueue::length(){
return m_iLength;
}
template
void CircularQueue::printQueue(void(*pFunc)(T)){
for (int i = m_iHead; i #ifndef COORDINATE_H_INCLUDED
#define COORDINATE_H_INCLUDED
class Coordinate{
public:
Coordinate();
Coordinate(double x, double y);
virtual ~Coordinate();
double getX();
double getY();
private:
double m_iX;
double m_iY;
};
Coordinate::Coordinate(){
}
Coordinate::Coordinate(double x, double y){
m_iX = x;
m_iY = y;
}
Coordinate::~Coordinate(){
}
double Coordinate::getX(){
return m_iX;
}
double Coordinate::getY(){
return m_iY;
}
#endif // COORDINATE_H_INCLUDED
#include
#include
#include "CircularQueue.h"
#include "Coordinate.h"
using namespace std;
//打印整型数据,作为函数指针传递给队列类
void printInt(int o){
cout cQueueInt = CircularQueue(3);
cQueueInt.enQueue(10);
cQueueInt.enQueue(20);
cQueueInt.enQueue(30);
cQueueInt.printQueue(&printInt);
cout cQueueCoor = CircularQueue(3);
Coordinate c1 = Coordinate(1,2);
Coordinate c2 = Coordinate(3,4);
Coordinate c3 = Coordinate(5,6);
cQueueCoor.enQueue(c1);
cQueueCoor.enQueue(c2);
cQueueCoor.enQueue(c3);
cQueueCoor.printQueue(&printCoor);
cout
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2956/viewspace-2807612/ ,如需转载,请注明出处,否则将追究法律责任。