首页 > 编程 > C++ > 正文

数组实现队列功能(C++练习记录)

2019-11-06 08:40:23
字体:
来源:转载
供稿:网友

Q:通过 数组 实现 队列(FIFO)功能

A:

MyQueue.h

#ifndef MYQUEUE_H#define MYQUEUE_H/*************************************//*环形队列实现 2017.03.01 by hyc    *//************************************/class MyQueue{public:	MyQueue(int queueCapacity);  //创建队列	virtual ~MyQueue();          //销毁队列	void ClearQueue();           //清空队列	bool QueueEmpty() const;     //判空队列	bool QueueFull() const;      //判满队列	int QueueLength() const;     //队列长度	bool EnQueue(int element);   //新元素入列	bool DeQueue(int &element);  //首元素出列	void QueueTraverse();        //遍历队列PRivate:	int *m_pQueue;               //队列数组指针	int m_iQueueLen;             //队列元素个数	int m_iQueueCapacity;        //队列数组容量	int m_iHead;                 //队首	int m_iTail;                 //队尾};#endifMyQueue.cpp

#include "MyQueue.h"#include <iostream>using namespace std;/*************************************//*环形队列实现 2017.03.01 by hyc    *//************************************/MyQueue::MyQueue(int queueCapacity){	m_iQueueCapacity = queueCapacity;	m_pQueue = new int[m_iQueueCapacity];	m_iHead = 0;	m_iTail = 0;	m_iQueueLen = 0;}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_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_iHead % m_iQueueCapacity;	m_iQueueLen--;	return true;}void MyQueue::QueueTraverse(){	cout << endl;	for (int i = m_iHead; i < m_iHead + m_iQueueLen; i++){		cout << m_pQueue[i % m_iQueueCapacity] << endl;//我写错了	}	cout << endl;}demo.cpp:用于测试队列功能是否实现

#include "MyQueue.h"#include <iostream>using namespace std;/*************************************//*环形队列实现 2017.03.01 by hyc    *//************************************/int main(void){	MyQueue *p = new MyQueue(4);	p->EnQueue(1);	p->EnQueue(2);	p->EnQueue(3);	p->EnQueue(4);	p->EnQueue(5);	p->QueueTraverse();	int e = 0;	p->DeQueue(e);	p->QueueTraverse();	cout << e << endl;	p->DeQueue(e);	p->QueueTraverse();	cout << e << endl;	p->ClearQueue();	p->QueueTraverse();	p->EnQueue(10);	p->EnQueue(20);	p->QueueTraverse();	int j = 0;	j=p->QueueLength();	cout << j << endl;	delete p;	p = NULL;	system("pause");		return 0;}输出结果:

注意:本次练习只实现了简单的int类型的队列功能,可以使用模板类进一步实现其多类型支持。并且本程序有很多不完善的地方,如分配空间等的异常检测。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选