/* MyQueue.cpp 代码 */
#include"MyQueue.h"
#include<iostream>
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_iQueueLength ==0?true:false;
}
int MyQueue::QueueLength() const //队列长度
{
return m_iQueueLen;
}
bool QueueFull() const //判断队列是否为满
{
if(m_iQueueLen == m_iQueueCapacity)
{
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) //将一个元素出队
{
if(QueueEmpty())
{
return false;
}
else
{
element = m_Queue[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;i++) //从头开始遍历
{
cout<<m_pQueue[i%m_iQueueCapacity]<<endl;
}
}
/* MyQueue.h 的代码*/
/*
/* 环形队列C++实现2015.9 by James */
#ifndef MYQUEUE_H
#define MYQUEUE_H
#endif // _DEBUG
class MyQueue
{
public:
MyQueue(int queueCapacity); //InitQueue(&Q) 创建队列
virtual ~MyQueue(); //DestroyQueue(&Q); 销毁队列
void ClearQueue(); //ClearQueue(&Q); 清空队列
bool QueueEmpty() const; //QueueEmoty(Q); 判空队列(判满)
bool QueueFull() const;
int QueueLength() const; //QueueLength() 队列长度
bool EnQueue(int element); //EnQueue(&Q,element) 新元素入队
bool DeQueue(int &element); //DeQueue(&Q,&element) 首元素出队
void QueueTraverse(); // QueueTraverse visit() 遍历队列
private:
int *m_pQueue; //队列数组指针
int m_iQueueLen; //队列元素个数
int m_iQueueCapacity; //队列数组容量
int m_iHead;
int m_iTail;
};
#endif
/* demo.cpp的代码 */
#include<iostream>
#include "stdlib.h"
#include "MyQueue.h"
/* 实现环形队列 */
int main(void)
{
MyQueue *P = new MyQueue(4);
delete p;
p = NULL;
system("pause");
return 0;
}
析构函数中应该是delete [] m_pQueue;
QueueTraverse() 中循环结束条件应该是i<m_iHead+m_iQueueLen
MyQueue.h头文件中多出了一个#endif // _DEBUG
#ifndef 和 #endif 是一一对应的,条件编译。
还有大小写敏感,P改成p