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

这是一个C++实现的循环队列模板类,使用数组作为底层数据结构,提供了push、pop、front、back等操作,并支持检查队列是否满或空,以及获取元素数量和队列大小的功能。代码中还包括了构造和析构函数。
摘要由CSDN通过智能技术生成
#ifndef QHPACKETQUEUE_H
#define QHPACKETQUEUE_H

#define MAX_QUEUE_SIZE 512

template<typename T>
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<typename T>
QHPacketQueue<T>::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<typename T>
QHPacketQueue<T>::~QHPacketQueue()
{
    if (m_data)
    {
        delete[]m_data;
    }
}

template<typename T>
bool QHPacketQueue<T>::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<typename T>
bool QHPacketQueue<T>::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<typename T>
bool QHPacketQueue<T>::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<typename T>
bool QHPacketQueue<T>::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<typename T>
bool QHPacketQueue<T>::isFull()
{
    return (m_itemsCount >= m_size);
}

template<typename T>
bool QHPacketQueue<T>::isEmpty()
{
    return (0 == m_itemsCount);
}

template<typename T>
int QHPacketQueue<T>::count()
{
    return m_itemsCount;
}

template<typename T>
int QHPacketQueue<T>::size()
{
    return m_size;
}

template<typename T>
void QHPacketQueue<T>::clean()
{
    m_head = 0;
    m_tail = 0;
    m_itemsCount = 0;
}

#endif // QHPACKETQUEUE_H

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

草上爬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值