循环队列

循环队列

每次出队,先判断队列是否为空。若不为空对头先出对,修改队列长度队长-1,修改队头对头向后移一位,(head+1)%content,运用模运算避免溢出和构成一个环。同理,出队   每次入队,先判断队列是否为满。若不为满对队的元素加入到队尾,修改队列长度队长+1,修改队尾对头向后移一位,(tail+1)%content。遍历的时候也同样进行模操作。

//Queue.h

class  myQueue{

public:
    myQueue(int   queContent);          //构造函数
    virtual ~myQueue();         //虚析构函数
    void  clearQueue();         //清空队列
    bool queueFul() const;                   //判满
    bool  queueEmpty() const; //判空
    int queuelength() const; //队长
    bool enQueue(int enlement); //入队
    bool deQueue(int &element);      //出队
    void queueTraverse();     //遍历
private:
    int  * m_pQueue;
    int m_queueContent;
    int m_queueHead;
    int m_queueTail;
    int m_queueLength;

};

//Queue.cpp

#include"Queue.h"

#include<iostream>
using namespace std;
myQueue::myQueue(int   queContent){
        m_queueContent=queContent;
        clearQueue();
        m_pQueue=new int  [m_queueContent]; //创建一个数组
}
  myQueue:: ~myQueue(){
      delete[]  m_pQueue ;
      m_pQueue=NULL; //释放内存,并将指针置为空
  }
    void    myQueue::clearQueue(){
        m_queueLength=0;
        m_queueHead=0;
        m_queueTail=0;
    }
    bool   myQueue::queueFul() const {
        return m_queueLength==m_queueContent?true:false;
    }
    bool    myQueue::queueEmpty() const {
       return m_queueLength==0?true:false;
    }
    int   myQueue::queuelength() const {
        return m_queueLength;
    }
    bool   myQueue::enQueue(int enlement){
        if(queueFul())
            return false;
        m_pQueue[m_queueTail]=enlement;
        m_queueTail+=1;
        m_queueTail=m_queueTail% m_queueContent;   //溢出处理,构成循环
        m_queueLength+=1;
    }
    bool   myQueue::deQueue(int &element){
        if(queueEmpty())
            return false;
        element=m_pQueue[m_queueHead];
        m_queueHead+=1;
        m_queueHead=m_queueHead%m_queueContent;  //同入队
        m_queueLength-=1;
    }
    void   myQueue::queueTraverse(){
        for(int i=m_queueHead;i<m_queueHead+m_queueLength;i++){
            cout<<m_pQueue[i%m_queueContent]<<endl;      
        }
        cout<<endl;
    }

//main.cpp

#include <iostream>
#include"Queue.cpp"
using namespace std;
int main()
{
     myQueue *p=new myQueue(6);
     p->enQueue(1);
     p->enQueue(2);
     p-> enQueue(3);
     p->enQueue(4);
     p->enQueue(5);
     p->enQueue(6);
     p->queueTraverse();
     p->deQueue( element);
     p->queueTraverse();
    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值