数据结构与算法-循环队列
在顺序队列出队列的时候,数组前面会有空余的空间,我们可以将数据往前搬移,提高空余空间的使用,但是效率比较低;我们可以使用循环队列来提高效率。 Head代表队列头,Tail代表队列尾,n代表队列的长度,如果Head与Tail大于等于n的时候就是到了循环点,可以将Head或者Tail余n来代表当前n内的位置。 一开始空余的循环队列,Head和Tail的位置 当有四个元素(a,b,c,d)入队,Head和Tail的位置 当所有元素出队后,Head与Tail是相等的,就是空队列 当满队列,Head和Tail的位置,可以看到Tail的位置是空余的,如果再加入一个元素的话就导致head与tail相等,判断条件是(Tail + 1) % n==Head 代码实现 template<class T> class MyCircularQueue { public: MyCircularQueue(int nQueueSize); ~MyCircularQueue(); bool empty() const; int size() const; void pop(); T front() const; T back() const; bool push(T const&); protected: T* m_pArrayQueue; int m_nQueueSize; int m_nHead; int