数据结构学习日记(3)——环形队列的代码实现

来源:互联网 发布:添加windows凭据 编辑:程序博客网 时间:2024/05/20 19:15
#ifndef  MYQUEUE_H#define  MYQUEUE_Hclass 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

环形队列比普通队列来讲内存的管理更加方便,对于内存的浪费的影响较小。

原创粉丝点击