c++实现环形队列

环形队列相对于普通队列有一定的好处。
头文件的内容如下:

#include <stdlib.h>
class CircleQueue
{
public:
	CircleQueue();
	CircleQueue(int capacity);
	~CircleQueue();
	bool IsEmpty();
	bool IsFull();
	void ClearQueue();
	int Length();
	bool EnQueue(int element);
	bool DeQueue(int &ele);
	void QueueTraverse();
private:
	int *m_pQueue;
	int m_iLen;
	int m_iCapacity;
	int m_iHead;
	int m_iTail;
};

源文件的内容如下:

#include <iostream>
#include "CircleQueue.h"
using namespace std;

CircleQueue::CircleQueue()
{
	cout << "CircleQueue::CircleQueue()"<< endl;
}
CircleQueue::CircleQueue(int capacity)
{
	m_iCapacity = capacity;
	m_pQueue = new int[m_iCapacity];
	ClearQueue();
}
CircleQueue::~CircleQueue()
{
	delete []m_pQueue;
	m_pQueue = NULL;
}
bool CircleQueue::IsEmpty()
{
	return m_iLen == 0 ? true : false;

}
bool CircleQueue::IsFull()
{
	return m_iLen == m_iCapacity ? true : false;
}
void CircleQueue::ClearQueue()
{
	m_iLen = 0;
	m_iHead = 0;
	m_iTail = 0;
}
int CircleQueue::Length()
{
	return m_iLen;
}
bool CircleQueue::EnQueue(int element)
{
	if (!IsFull()){
		m_pQueue[m_iTail++] = element;
		m_iTail = m_iTail % m_iCapacity;
		m_iLen++;
		return true;
	}
	return false;
}
bool CircleQueue::DeQueue(int &ele)
{
	if (!IsEmpty()){
		ele = m_pQueue[m_iHead];
		m_iHead++;
		m_iHead = m_iHead % m_iCapacity;
		m_iLen--;
		return true;
	}
	return false;
}
void CircleQueue::QueueTraverse()
{
	if (!IsEmpty()){
		for (int i = m_iHead; i < m_iHead + m_iLen; i++){
			cout << m_pQueue[i%m_iCapacity] << endl;
		}
	}else{
		cout << "Queue is empty!"<< endl;
	}
}

测试程序如下:

#include <iostream>
#include "CircleQueue.h"
using namespace std;

int main(void)
{
	CircleQueue q(5);
	q.EnQueue(1);
	q.EnQueue(2);
	q.EnQueue(3);
	q.EnQueue(4);
	q.EnQueue(5);
	q.EnQueue(6);
	q.QueueTraverse();

	int  ele;
	q.DeQueue(ele);
	cout << ele << endl;
	cout << ""<<endl;
	q.QueueTraverse();

	q.ClearQueue();
	q.QueueTraverse();

	q.EnQueue(7);
	q.EnQueue(8);
	q.QueueTraverse();
	system("pause");
	return 0;
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值