简单循环队列模版(数组实现)

本文介绍了一个使用数组实现的循环队列模板类,包括基本操作如入队、出队、获取队首队尾元素等,并通过示例代码演示了其使用方法。

用数组写的一个循环队列的模版,功能是常用的那几个功能。

文件"myqueue.h"

#define QUEUE_INIT_SIZE 100	//队列初始化时分配的最大容量
#define QUEUE_INCREMENT 10	//队列满时,扩充的容量

#include<iostream>
using namespace std;

template<class T>
class My_queue
{
private:
	T *elem;
	int head;	//头
	int rear;	//尾
	int queue_size;	//队列容量
	int increment_size;	//每次扩充容量
public:
	My_queue(int maxsize=QUEUE_INIT_SIZE,int incresize=QUEUE_INCREMENT)
	{
		elem=new T[maxsize];
		head=0;
		rear=0;
		queue_size=maxsize;
		increment_size=incresize;
	}

	void Increment_Queue()	//对队列进行扩充,并将原队列内容全部复制
	{
		T *a;
		a=new T[queue_size+increment_size];
		for(int i=0;i<queue_size;i++)
			a[i]=elem[i];
		delete[]elem;
		elem=a;
		head=0;
		rear=queue_size-1;
		queue_size+=increment_size;
		delete[]a;
	}

	bool empty()
	{
		return (rear==head);
	}

	int size()
	{
		int length=0;
		length=(rear-head+queue_size)%queue_size;
		return length;
	}

	void push(T data)
	{
		if( (rear+1)%queue_size==head )//判断循环队列是否满的条件
			Increment_Queue();
		elem[rear]=data;
		rear=(rear+1)%queue_size;
	}

	T front()
	{
		if(empty())
		{
			cout<<"queue is empty."<<endl;
			exit(0);
		}
		T data=elem[head];
		return data;
	}

	T back()
	{
		if(empty())
		{
			cout<<"queue is empty."<<endl;
			exit(0);
		}
		int pos=(rear-1)%queue_size;
		T data=elem[pos];
		return data;
	}

	void pop()
	{
		head=(head+1)%queue_size;
	}
	
	void clean()
	{
		delete[]elem;
	}
};


测试代码"main.cpp"

#include"myqueue.h"

int main()
{
	My_queue<char> q;
	if(q.empty())
		cout<<"queue is empty!"<<endl;
	q.push('L');
	q.push('O');
	q.push('V');
	q.push('E');

	cout<<"queue's size is : "<<q.size()<<endl;
	cout<<"queue's last element is : "<<q.back()<<endl;

	q.push('U');
	cout<<"Now queue's size is : "<<q.size()<<endl;
	while(!q.empty())
	{
		cout<<q.front();
		q.pop();
	}
	cout<<endl;

	cout<<q.size()<<endl;
	
	return 0;
}



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值