C++ 类实现数组循环队列

循环队列可以用数组实现,具体形式如下

MyQueue.h

#pragma once
class MyQueue
{
private:
	int *m_pQueue;              // 队列数组指针
	int m_iQueueLen;            // 队列元素个数
	int m_iQueueCapacity;       // 队列数组容量
	int m_iHead;                // 队头
	int m_iTail;                // 队尾
public:
	MyQueue(int queueCapacity); // 创建队列
	~MyQueue();                 // 摧毁队列
	void ClearQueue();          // 清空队列
	bool QueueEmpty() const;    // 判断队列是否为空
	bool QueueFull() const;     // 判断队列是否为满
	int QueueLength() const;    // 判断队列是否为满
	bool EnQueue(int element);  // 插入队列
	bool DeQueue(int &elemnt);  // 出队操作
	void QueueTraverse();       // 遍历队列操作
};

MyQueue.cpp

#include "MyQueue.h"

#include<iostream>

MyQueue::MyQueue(int queueCapacity)
{
	m_iQueueCapacity = queueCapacity;
	m_iHead = 0;
	m_iTail = 0;
	m_iQueueLen = 0;
	m_pQueue = new int[m_iQueueCapacity];

}


MyQueue::~MyQueue()
{
	delete[]m_pQueue;
	m_pQueue = NULL;
}

void MyQueue::ClearQueue()
{
	m_iHead = 0;
	m_iTail = 0;
	m_iQueueLen = 0;

}

bool MyQueue::QueueEmpty() const
{
	return(m_iQueueLen == 0 ? true : false);

}

bool MyQueue::QueueFull() const
{
	return(m_iQueueLen == m_iQueueCapacity ? true : false);
}

int MyQueue::QueueLength() const
{
	return m_iQueueLen;
}

bool MyQueue::EnQueue(int element)
{
	if (QueueFull())
		return false;
	m_pQueue[m_iTail] = element;
	m_iTail++;
	m_iTail %= m_iQueueCapacity;
	m_iQueueLen++;
	return true;
}

bool MyQueue::DeQueue(int &element)
{
	if (QueueEmpty())
		return false;
	element = m_pQueue[m_iHead];
	m_iHead++;
	m_iHead %= m_iQueueCapacity;
	m_iQueueLen--;
	return true;
	
}

void MyQueue::QueueTraverse()
{
	for (int i = m_iHead; i < m_iQueueLen+ m_iHead; i++)
	{
		std::cout << m_pQueue[i%m_iQueueCapacity] << std::endl;
	}
	std::cout << std::endl;
}

测试函数

#include "MyQueue.h"
#include<iostream>
using namespace std;
int main()
{
	MyQueue *p = new MyQueue(4);

	p->EnQueue(10);
	p->EnQueue(12);
	p->EnQueue(16);
	p->EnQueue(18);
	p->EnQueue(20);
	p->QueueTraverse();
	int e;
	p->DeQueue(e);
	cout << endl;
	cout << e << endl;
	
	p->DeQueue(e);
	cout << endl;
	cout << e << endl;

	p->QueueTraverse();

	p->ClearQueue();

	p->QueueTraverse();

	p->EnQueue(20);
	p->EnQueue(30);

	p->QueueTraverse();


	delete p;
	p = NULL;

	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值