环形队列的c++实现

Myqueue.h

<span style="font-family:Verdana;font-size:18px;">class Circle_Queue
{
public:
	Circle_Queue(int queue_capacity);//构造函数
	virtual ~Circle_Queue();//析构函数
	bool isQueueEmpty()const;//判断队列是否为空
	bool isQueueFull()const;//判断队列是否为满
	void clear_queue();//清空队列
	int queue_length()const;//得到队列长度
	bool InQueue(int  element);//入队
	bool DeQueue();//出队
	void queue_traverse();//遍历队列
private:
	int m_queue_capacity;//队列的容量
	int m_queue_length;//队列的实际长度
	int * CircleQ;//为队列申请的数组
	int q_head;//队列头,这里为方便起见只设置为一个整数
	int q_tail;//队列尾
};</span>


Myqueue.cpp

<span style="font-family:Verdana;font-size:18px;">#include<iostream>
#include"Myqueue.h"
using namespace std;
Circle_Queue::Circle_Queue(int queue_capacity)//构造函数,为每一个私有成员赋初值
{
	m_queue_capacity = queue_capacity;
	clear_queue();
	CircleQ=new int[queue_capacity];
	
}
Circle_Queue::~Circle_Queue()//析构函数
{
	delete[]CircleQ;
	CircleQ = NULL;
}
void Circle_Queue::clear_queue()//清空队列
{
	q_head = q_tail = 0;
	m_queue_length = 0;
}
bool Circle_Queue::isQueueEmpty()const//判断队列是否为空
{
	return m_queue_length ==0? true : false;
}
int Circle_Queue::queue_length()const//得到队列长度
{
	return m_queue_length;
}
bool Circle_Queue::isQueueFull()const//判断队列是否为满
{
	return (m_queue_capacity == m_queue_length) ? true:false;
}

bool Circle_Queue::DeQueue()//出队
{
	if (isQueueEmpty())
		return false;
	else
	{
		q_head = (q_head++)%m_queue_capacity;//对队列的容量取余,体现环形队列的特点
		m_queue_length--;
		return true;
	}
}
bool Circle_Queue::InQueue(int element)//入队
{
	if (isQueueFull())
	{
		cout << "the queue is full,failed to insert a num" << endl;
		return false;
	}
	else
	{
		CircleQ[q_tail] = element;
		q_tail = (q_tail++) % m_queue_capacity;//从队尾入队
		m_queue_length++;
		return true;
	}
}
void Circle_Queue::queue_traverse()//遍历队列
{
	if (isQueueEmpty()!=true)
	{
		for (int i = q_head; i < q_head + m_queue_length; i++)//注意q_head只是一个整数,i应该小于它与队长的和
		{
			cout << CircleQ[i%m_queue_capacity] <<" ";//仍是对容量取余
		}
		cout << endl;
	}
}
</span>

main.cpp
<span style="font-family:Verdana;font-size:18px;">#include<iostream>
#include<stdlib.h>
#include"Myqueue.h"
using namespace std;
int main()
{
	Circle_Queue *p = new Circle_Queue(4);//队列的容量为4
	p->InQueue(10);//测试数据都是整数
	p->InQueue(20);
	p->InQueue(30);
	p->InQueue(40);
	p->InQueue(50);//这里插入第五个元素,超出了队列的容量,插入不成功
	p->queue_traverse();
	
	p->clear_queue();//测试清空队的函数
	p->InQueue(50);
	p->InQueue(30);
	p->queue_traverse();

	p->DeQueue();
	p->queue_traverse();

	delete p;
	p = NULL;
	system("pause");
	
	return 0;
}</span>




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值