FIFO
普通队列
循环队列
c++实现循环队列
#ifndef MYQUEUE_H
#define MYQUEUE_H
/****************************************/
/*环形队列C++实现*/
/****************************************/
class MyQueue
{
public:
MyQueue(int queueCapacity); //InitQueue(&Q)
virtual ~MyQueue(); //DestroyQueue(&Q)
void ClearQueue(); //ClearQueue(&Q)
bool QueueEmpty() const; //QueueEmpty(Q)
bool QueueFull() const;
int QueueLength() const; //QueueLength(Q)
bool EnQueue(int element); //EnQueue(&Q,element)
bool DeQueue(int &element); //DeQueue(&Q,&element)
void QueueTraverse(); //QueueTraverse(Q,visit())B
private:
int *m_pQueue;//队列数组指针
int m_iQueueLen;//队列元素个数
int m_iQueueCapacity;//队列数组容量
int m_iHead;
int m_iTail;
};
#endif
#include
#include
#include"MyQueue.h"
#include
using namespace std;
MyQueue::MyQueue(int queueCapacity)
{
m_iQueueCapacity =queueCapacity;
m_pQueue = new int[m_iQueueCapacity];
ClearQueue();
}
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;
//return m_iQueueLen==0?true:false;
}
int MyQueue::QueueLength() const
{
return m_iQueueLen;
}
bool MyQueue::QueueFull() const
{
if(m_iQueueCapacity==m_iQueueLen)
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;
m_iQueueLen++;
return true;
}
}
bool MyQueue::DeQueue(int &element)//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 { cout< } } #include #include #include"MyQueue.h" #include"MyQueue.cpp" /****************************/ /* 实现环形队列 */ /****************************/ using namespace std; int main(void) { MyQueue *p =new MyQueue(4); p->EnQueue(10); p->EnQueue(12); p->EnQueue(16); p->EnQueue(18); p->EnQueue(20); p->QueueTraverse(); int e=0; p->DeQueue(e); cout< cout< delete p; p=NULL; system("pause"); return 0; }当存入的数据不是int,而是其他复杂数据类型时