数据结构_队列

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值