头文件:
template <class T>
class MyQueue {
public:
MyQueue(int capacity); //构造函数,声明队列的容量
virtual ~MyQueue();
void clear(); //清空队列
bool isEmpty(); //队列是否为空
int length(); //队列长度
bool enQueue(T element); //元素入队
bool deQueue(T &element); //元素出队
bool isFull(); //队列是否已满
void printAll();
private:
T *m_pQueue; //队列数组指针
int m_iLength; //队列长度
int m_iCapacity;//队列容量
int m_iHead;//队列头
int m_iTail;//队列尾
};
cpp文件:
#include "MyQueue.h"
template <class T> MyQueue<T>::MyQueue(int capacity) {
clear();
m_iCapacity = capacity;
m_pQueue = new T[capacity];
}
template <class T> MyQueue<T>::~MyQueue() {
delete []m_pQueue;
m_pQueue = NULL;
}
template <class T> void MyQueue<T>::clear() {
m_iLength = 0;
m_iHead = 0;
m_iTail = 0;
delete m_pQueue;
m_pQueue = NULL;
}
template <class T> bool MyQueue<T>::isEmpty() {
return m_iLength == 0;
}
template <class T> int MyQueue<T>::length() {
return m_iLength;
}
template <class T> bool MyQueue<T>::enQueue(T element) {
if (isFull()) return false;
m_pQueue[m_iTail] = element;
m_iTail++;
m_iTail = m_iTail % m_iCapacity;
m_iLength++;
return true;
}
template <class T> bool MyQueue<T>::deQueue(T &element) {
if (isEmpty()) return false;
element = m_pQueue[m_iHead];
m_iHead++;
m_iHead = m_iHead % m_iCapacity;
m_iLength--;
return true;
}
template <class T> bool MyQueue<T>::isFull() {
return m_iLength >= m_iCapacity;
}
template <class T> void MyQueue<T>::printAll() {
for (int i = m_iHead; i < m_iLength + m_iHead; i++) {
cout << m_pQueue[i%m_iCapacity] << endl;
}
}
测试:
#include <iostream>
#include <stdlib.h>
#include "MyQueue.cpp"
using namespace std;
int main(void) {
MyQueue<int> queue(5);
queue.enQueue(1);
queue.enQueue(2);
queue.enQueue(3);
queue.enQueue(4);
queue.enQueue(5);
queue.enQueue(6);
cout << "===printall===" << endl;
queue.printAll();
cout << "===printall===" << endl;
int ele;
queue.deQueue(ele);
cout << ele << endl;
queue.deQueue(ele);
cout << ele << endl;
cout << "===printall===" << endl;
queue.printAll();
cout << "===printall===" << endl;
system("pause");
return 0;
}