C++笔试题之用数组实现队列

#ifndef QHPACKETQUEUE_H
#define QHPACKETQUEUE_H

#define MAX_QUEUE_SIZE 512

template
class QHPacketQueue
{
public:
    QHPacketQueue(int size=MAX_QUEUE_SIZE);
    ~QHPacketQueue();
public:
    bool  push(T data);
    bool  pop(T *data);
    bool  front(T *data);
    bool  back(T *data);
    bool isFull();
    bool isEmpty();
    int  count();
    int  size();
    void clean();

private:
    int m_size;
    int m_head;
    int m_tail;
    int m_itemsCount;
    T*  m_data;
};

template
QHPacketQueue::QHPacketQueue(int size)
    : m_size(size)
    , m_head(0)
    , m_tail(0)
    , m_itemsCount(0)
    , m_data(nullptr)
{
    m_data = new T[m_size];
}

template
QHPacketQueue::~QHPacketQueue()
{
    if (m_data)
    {
        delete[]m_data;
    }
}

template
bool QHPacketQueue::push(T data)
{
    if ((m_itemsCount >= m_size) || (nullptr == m_data))
    {
        return false;
    }

    int pos = (m_tail % m_size);
    m_data[pos] = data;
    m_tail++;
    m_itemsCount++;

    return true;
}

template
bool QHPacketQueue::pop(T *data)
{
    if ((m_itemsCount == 0) || (nullptr == m_data))
    {
        return false;
    }

    int pos = (m_head % m_size);
    *data = m_data[pos];
    m_head++;
    m_itemsCount--;

    return true;
}

template
bool QHPacketQueue::front(T *data)
{
    if ((m_itemsCount == 0) || (nullptr == m_data))
    {
        return false;
    }

    int pos = (m_head % m_size);
    *data = m_data[pos];

    return true;
}

template
bool QHPacketQueue::back(T *data)
{
    if ((m_itemsCount == 0) || (nullptr == m_data))
    {
        return false;
    }

    int pos = (m_tail-1) % m_size;
    *data = m_data[pos];

    return true;
}

template
bool QHPacketQueue::isFull()
{
    return (m_itemsCount >= m_size);
}

template
bool QHPacketQueue::isEmpty()
{
    return (0 == m_itemsCount);
}

template
int QHPacketQueue::count()
{
    return m_itemsCount;
}

template
int QHPacketQueue::size()
{
    return m_size;
}

template
void QHPacketQueue::clean()
{
    m_head = 0;
    m_tail = 0;
    m_itemsCount = 0;
}

#endif // QHPACKETQUEUE_H

原文链接:C++面试题/笔试题之用数组实现队列_草上爬的博客-CSDN博客

你可能感兴趣的:(C++面试题/笔试题,c++,数组,队列)