c++类模板实现环队
// 队列.cpp: 定义控制台应用程序的入口点。
// 环队具有许多优点,所以选择环队进行实现
#include "stdafx.h"
#include<iostream>
using namespace std;
template <class Type>class Queue
{
private:
Type * queue; //队列空间具体实现
int front, rear; //队头队尾指针
int max; //队列最大长度
protected:
int count; //计数器,记录队列长度
public:
Queue(int size);
~Queue();
void clearqueue();
bool isempty() const;
bool isfull() const;
int getlen() const;
bool getfront(Type &item);
void display();
bool insert(const Type &item);
bool remove(Type &item);
bool remove();
};
template<class Type>
Queue<Type>::Queue(int size)
{
queue = new Type[size];
front = rear = 0;
max = size;
}
template<class Type>
Queue<Type>::~Queue()
{
clearqueue();
}
template<class Type>
void Queue<Type>::clearqueue()
{
front = rear = 0;
count = 0;
}
template<class Type>
bool Queue<Type>::isempty() const
{
return count == 0 ? true : false;
}
template<class Type>
bool Queue<Type>::isfull() const
{
return count >= max ? true : false;
}
template<class Type>
int Queue<Type>::getlen() const
{
return count;
}
template<class Type>
bool Queue<Type>::getfront(Type & item)
{
if (isempty())
return false;
item = queue[front];
return true;
}
template<class Type>
void Queue<Type>::display()
{
if (isempty())
cout << "队列为空!" << endl;
cout << "队列由队头到队尾元素为:" << endl;
for (int i = front; i < count + front; i++)
cout << queue[i%max] << " ";
cout << endl;
}
template<class Type>
bool Queue<Type>::insert(const Type & item)
{
if (isfull())
return false;
queue[rear] = item;
rear = (rear + 1) % max;
count++;
return true;
}
template<class Type>
bool Queue<Type>::remove(Type & item)
{
if (isempty())
return false;
item = queue[front];
front = (front + 1) % max;
count--;
return true;
}
template<class Type>
bool Queue<Type>::remove()
{
if (isempty())
return false;
front = (front + 1) % max;
count--;
return true;
}
int main()
{
Queue<char> q(10);
char a[4] = { 'q','w','e','r' };
q.insert(a[0]);
q.insert(a[1]);
q.insert(a[2]);
q.insert(a[3]);
q.display();
q.remove();
char item;
q.remove(item);
cout << item << endl;
q.display();
system("pause");
return 0;
}