#ifndef MyQueue_H
#define MyQueue_H
/************************
 *  环形队列C++实现 
 * *********************/
class MyQueue
{
public:
  MyQueue(int queueCapacity); //创建队列
  virtual ~MyQueue();         //销毁队列
  void ClearQueue();          //清空队列
  bool QueueEmpty() const;    //判空队列
  int QueueLength() const;    //获取队列长度
  bool EnQueue(int element);  //新元素入队
  bool DeQueue();             //首元素出队
  void QueueTraverse();       //遍历队列
  bool QueueFull() const;

private:
  int *m_pQueue;        //队列数组指针
  int m_iQueueLen;      //队列元素个数
  int m_iQueueCapacoty; //队列数组容量
  int m_iHead;
  int m_iTail;
};
#endif
#include <iostream>
#include "MyQueue.h"
using namespace std;

MyQueue::MyQueue(int queueCapactiy)
{
  m_iQueueCapacoty = queueCapactiy;
  ClearQueue();
  m_pQueue = new int[m_iQueueCapacoty];
};

MyQueue::~MyQueue()
{
  delete[] m_pQueue;
  m_pQueue = NULL;
}

void MyQueue::ClearQueue()
{
  m_iHead = 0;
  m_iTail = 0;
  m_iQueueLen = 0;
}

bool MyQueue::QueueEmpty() const
{
  return QueueLength() == 0;
}

int MyQueue::QueueLength() const
{
  return m_iQueueLen;
}

bool MyQueue::QueueFull() const
{
  return QueueLength() == m_iQueueCapacoty;
}

bool MyQueue::EnQueue(int element)
{
  if (QueueFull())
  {
    return false;
  }
  else
  {
    m_pQueue[m_iTail] = element;
    m_iTail++;
    m_iTail = m_iTail % m_iQueueCapacoty;
    m_iQueueLen++;
    return true;
  }
}
bool MyQueue::DeQueue()
{
  if (QueueEmpty())
  {
    return false;
  }
  else
  {
    m_iHead++;
    m_iHead = m_iHead % m_iQueueCapacoty;
    m_iQueueLen--;
    return true;
  }
}
void MyQueue::QueueTraverse()
{
  int l = QueueLength();
  for (int i = 0; i < l; i++)
  {
    cout << m_pQueue[(m_iHead + i) % m_iQueueCapacoty] << endl;
  }
}
内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!