循环队列
每次出队,先判断队列是否为空。若不为空对头先出对,修改队列长度队长-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;
}