数据结构--环形队列--c++实现
queue.h
#ifndef queue_h
#define queue_h
class myQueue
{
public:
myQueue(int qCapacity);
virtual~myQueue();
void clearQ();
bool emptyQ();
int qLength();
bool enQueue(int temp);
bool deQueue(int &temp);
void qTraverse();
bool fullQ();
private:
int _qCapacity;
int _qlength;
int *_qQueue;
int _head;
int _tail;
};
#endif
queue.cpp
#include <iostream>
#include"queue.h"
using namespace std;
myQueue::myQueue(int qCapacity)
{
_qCapacity = qCapacity;
_qlength = 0;
_qQueue = new int [qCapacity];
_head = 0;
_tail = 0;
}
myQueue::~myQueue()
{
delete []_qQueue;
_qQueue = nullptr;
}
void myQueue::clearQ(){
_head = 0;
_tail = 0;
_qlength = 0;
}
bool myQueue::emptyQ(){
if (_qlength == 0)
{
return true;
}else
{
return false;
}
}
int myQueue::qLength(){
return _qlength;
}
bool myQueue::enQueue(int temp){
if (fullQ())
{
return false;
}
else
{
_qQueue[_tail] = temp;
_tail %= _qCapacity;//防止下标越界
_tail++;
_qlength++;
return true;
}
}
bool myQueue::deQueue(int &temp){
if (emptyQ())
{
return false;
}
else
{
temp = _qQueue[_head];
_head++;
_head %= _qCapacity;//防止下标越界
_qlength--;
return true;
}
}
void myQueue::qTraverse(){
for (int i = _head; i < _qlength+_head; i++)
{
cout<<_qQueue[i%_qCapacity]<<endl;//防止下标越界
}
cout<<endl;
}
bool myQueue::fullQ(){
if (_qlength == _qCapacity)
{
return true;
}
else
{
return false;
}
}
**
demo.cpp
**
#include <iostream>
#include "queue.h"
using namespace std;
int main(){
myQueue *p= new myQueue(4);
p->enQueue(2);
p->enQueue(5);
p->enQueue(8);
p->enQueue(99);
if(p->fullQ()){
cout<<"hahahahhahahhahahhah"<<endl;}
//p->enQueue(55);
p->qTraverse();
int a = 0;p->deQueue(a);cout<<endl;cout<<a<<endl;
p->deQueue(a);cout<<endl;cout<<a<<endl;cout<<endl;
p->qTraverse();
cout<<p->qLength()<<endl;
p->clearQ();
if(p->emptyQ()){
cout<<"nonoononoonononononoon"<<endl;}
system("pause");
return 0;
}