队列篇(一)----环形队列的创建与检测(C++版)

来源:互联网 发布:小米3怎么用4g网络 编辑:程序博客网 时间:2024/05/29 15:49

创建类声明文件文件  MyQueue.h

class MyQueue{
public:
MyQueue(int queueCapacity);      //创建队列
virtual ~MyQueue();                      //销毁队列
void ClearQueue();                       //清空队列
bool QueueEmpty() const;         //判空队列

int QueueLength() const;           //检测队列长度
bool QueueFull() 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;                                     //队列尾
};

创建类定义文件  MyQueue.cpp

#include "MyQueue.h"
#include<iostream>
using namespace std;
MyQueue::MyQueue(int queueCapacity){
m_iQueueCapacity = queueCapacity;
m_pQueue = new int[m_iQueueCapacity];       //动态创建一个规定容量的数组
ClearQueue();                                                      //初始时,元素个数,头队列,尾队列都为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{
if (m_iQueueLen == 0){
return true;
}
else{
return false;
}
}
int MyQueue::QueueLength()const{
return m_iQueueLen;
}
bool MyQueue::QueueFull()const{
if (m_iQueueLen == m_iQueueCapacity){
return true;
}
else{
return false;
}
}
bool MyQueue::EnQueue(int element){
if (QueueFull()){
return false;
}
else{
m_pQueue[m_iTail] = element;
m_iTail++;
m_iTail = m_iTail%m_iQueueCapacity;      //核心:这里取容量的余数,为了实现循环遍历成一个环形,达到数组容量时,又置为0
m_iQueueLen++;                                         //队列元素个数加一
return true;
}
}
bool MyQueue::DeQueue(int &element){
if (QueueEmpty()){
return false;
}
else{
element = m_pQueue[m_iHead];
m_iHead++;
m_iHead = m_iHead%m_iQueueCapacity;      //与入队时作用相同
m_iQueueLen--;                                                //队列元素减一
return true;
}
}
void MyQueue::QueueTraverse(){
for (int i = m_iHead; i < m_iQueueLen; i++){                    //循环从队列头开始,执行队列长度次,到达队列尾
cout << m_pQueue[i%m_iQueueLen] << endl;        //输出按环形队列输出
}
}

创建测试文件  demo.cpp

#include<iostream>
#include<stdlib.h>
#include"MyQueue.h"


int main(void){
MyQueue *p = new MyQueue(4);           //新建一个空间大小为四的环形队列
p->EnQueue(10);                                    //给环形队列添加两个整数10,12
p->EnQueue(12);
p->QueueTraverse();                             //循环遍历输出,显示10,12
}

原创粉丝点击