今天,我们就写一个简单的循环队列吧.最近比较忙,就贴这点了.呵呵.
还是那句话,大家编程的时候应该考虑三个方面的问题.
一个是:思想
第二是:方法
第三是:风格
#ifndef _QUEUE_H_
#define _QUEUE_H_
#define MAX_SIZE 64
template <typename T>
class CQueue
{
public:
CQueue():m_nHead(0),m_nTail(0){};
public:
/*-------------------------------*/
失败返回-1
/*-------------------------------*/
int Push ( const T e );
int Pop ( T & e );
int GetLength ( );
bool IsEmpty( );
bool IsFull( );
void operator +=( const T e );
T operator --( );
private:
private:
T m_Elems[MAX_SIZE];
int m_nHead;
int m_nTail;
};
template <typename T>
int CQueue<T>::Push( T e )
{
if( IsFull() ) return -1;
m_nTail = ( m_nTail + 1 ) % MAX_SIZE;
m_Elems[ m_nTail ] = e;
return m_nTail;
}
template <typename T>
int CQueue<T>::Pop( T & e )
{
if ( IsEmpty() ) return -1;
m_nHead = ( m_nHead + 1 ) % MAX_SIZE;
e = m_Elems[m_nHead];
return m_nHead;
}
template <typename T>
int CQueue<T>::GetLength()
{
return m_nHead > m_nTail ? m_nTail + ( MAX_SIZE - m_nHead ) : m_nTail - m_nHead;
}
template <typename T>
bool CQueue<T>::IsEmpty()
{
return m_nHead == m_nTail ;
}
template <typename T>
bool CQueue<T>::IsFull()
{
return ( m_nTail + 1 ) % MAX_SIZE == m_nHead ;
}
template <typename T>
void CQueue<T>::operator +=( const T e )
{
Push( e );
}
template <typename T>
T CQueue<T>::operator --( )
{
T e;
Pop( e );
return e;
}
#endif//_QUEUE_H_