<pre name="code" class="cpp">// RingQueue.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
/*
0 1 2 3 4 5 6 7 8 9
——————————
——————————
h t
*/
template <typename T, size_t MaxCap>
class RingQueue
{
private:
inline bool isFull() const
{
return ((m_tail == m_head) && m_tag);
}
inline bool isEmpty() const
{
return ((m_head == m_tail) && !m_tag);
}
public:
RingQueue() : m_head(0), m_tail(0), m_tag(false){}
size_t size() const
{
if (m_head < m_tail)
return m_tail - m_head;
else if (m_head > m_tail)
return MaxCap - m_head + m_tail;
else if (isEmpty())
return 0;
else
return MaxCap;
}
// 写
bool push(const T& val)
{
if (isFull())
return false;
m_arr[m_tail] = val;
m_tail = (m_tail + 1) % MaxCap;
if (m_tail == m_head)
{
m_tag = true;
}
return true;
}
bool pop(T& val)
{
if (isEmpty())
return false;
val = m_arr[m_head];
m_head = (m_head + 1) % MaxCap;
if (m_tail == m_head)
{
m_tag = false;
}
return true;
}
private:
T m_arr[MaxCap];
int m_head;
int m_tail;
bool m_tag;
};
int _tmain(int argc, _TCHAR* argv[])
{
RingQueue<int, 500> que;
int i = 0;
while(que.push(++i))
{
printf("当前队列size = %d\n", que.size());
}
int nVal = 0;
while(que.pop(nVal))
{
printf("%d \t", nVal);
}
getchar();
return 0;
}
简单环形队列实现
最新推荐文章于 2024-02-29 20:26:59 发布