#ifndef MYQUEUE_H
#define MYQUEUE_H
class MyQueue
{
public:
MyQueue(int QueueCapcity);
virtual ~MyQueue();
void ClearQueue();
bool QueueEmpty() const;
bool QueueFull() const;
int QueueLength();
bool EnQueue(int element);
bool DeQueue(int &element);
void QueueTraverse(); // void QueueTraverse( Q visit()) 访问复杂对象的时候需要定义访问方法函数
private:
int *m_Queue;
int m_iQueueLen;
int m_iQueueCapacity;
int m_Head;
int m_Tail;
};
MyQueue::MyQueue(int QueueCapcity)
{
m_iQueueCapacity = QueueCapcity;
m_Head = 0;
m_Tail = 0;
m_Queue = new int[m_iQueueCapacity]; //从堆中申请内存可能会失败
m_iQueueLen = 0;
}
MyQueue::~MyQueue()
{
delete[]m_Queue;
m_Queue = NULL;
}
void MyQueue::ClearQueue()
{
m_Head = 0;
m_Tail = 0;
m_iQueueLen = 0;
}
bool MyQueue::QueueEmpty() const
{
return m_iQueueLen == 0 ? true : false;
}
int MyQueue::QueueLength()
{
return m_iQueueLen;
}
bool MyQueue::QueueFull() const
{
if (m_iQueueLen == m_iQueueCapacity)
return true;
else
return false;
}
bool MyQueue::EnQueue(int element)
{
if (QueueFull())
return false;
else
{
m_Queue[m_Tail] = element;
m_Tail++;
m_Tail = m_Tail % m_iQueueCapacity; //实现环形队列的重要一步
m_iQueueLen++;
return true;
}
}
bool MyQueue::DeQueue(int &element)
{
if (QueueEmpty())
return false;
else
{
element = m_Queue[m_Head];
m_iQueueLen--;
m_Head++;
m_Head = m_Head % m_iQueueCapacity; //实现环形队列的重要一步
return true;
}
}
void MyQueue::QueueTraverse()
{
for (int i(m_Head); i < m_iQueueLen + m_Head; ++i)
{
cout << m_Queue[i%m_iQueueCapacity] << ','; //实现环形队列的重要一步
}
}
#endif
环形队列比普通队列来讲内存的管理更加方便,对于内存的浪费的影响较小。