c++实现基本循环队列操作

在慕课网上学习的c++循环队列,自己也写了个实现代码。

头文件:

#ifndef MYQUEUE_H
#define MYQUEUE_H

class MyQueue{
public:
    MyQueue(int queueCapacity);     //InitQueue(&q) 创建队列
    virtual ~MyQueue();                //DestroyQueue(&Q)销毁队列
    void clearQueue();              //ClearQueue(&Q) 清空队列 
    bool QueueEmpty() const;        //QueueEmpty(&Q) 判空队列
    int QueueLength() const;        //QueueLength(&Q) 判断队列长度
    bool EnQueue(int element);      //EnQueue(&Q, element)新元素入队
    bool QueueFull() const;
    bool DeQueue(int &element);     //DeQueue(&Q,&element)首元素出队
    void QueueTraverse();           //QueueTraverse(Q,visit())遍历队列 
private:
    int *m_pQueue;      //队列数组指针
    int m_iQueueLen;    //队列元素个数
    int m_iQueueCapacity;   //队列数组容量 
    int m_iHead;
    int m_iTail;

};

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

MyQueue::MyQueue(int queueCapacity){
    m_iQueueCapacity=queueCapacity;
    clearQueue();
    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;
}
int MyQueue::QueueLength() const{
    return m_iQueueLen;
}
bool MyQueue::QueueFull() const{
    return m_iQueueLen==m_iQueueCapacity?true:false;
}
bool MyQueue::EnQueue(int element){
    if (QueueFull())
    {
        cout<<"false"<<endl;
        return false;
    }
    else{
        m_pQueue[m_iTail]=element;
        m_iTail++;
        m_iTail=m_iTail%m_iQueueCapacity;    //循环队列,这一步很关键
        m_iQueueLen++;
        return true;
    }
}
bool MyQueue::DeQueue(int &element){
    if (QueueEmpty())
    {
        cout<<"empty";
        return false;
    }
    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+m_iHead;i++) 
    {
        cout<<m_pQueue[i%m_iQueueCapacity]<<endl;
    }
}
int main(){
    MyQueue *p=new MyQueue(4);
    p->EnQueue(15);
    p->EnQueue(16);
    p->EnQueue(18);
    p->EnQueue(20);
    p->EnQueue(35);
    p->QueueTraverse();
    cout<<endl;
    int n=0;
    p->DeQueue(n);
    p->QueueTraverse();
    cout<<endl;
    p->clearQueue();
    p->DeQueue(n);

    return 0;
}

代码的实现
循环队列的c++实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值