类模板——循环队列的实现

#include <iostream>
using std::cout;
using std::endl;

template <typename T, size_t sz = 10>
class Queue
{
public:
    Queue()
    :_front(0)
    ,_rear(0)
    //,_size(sz)
    ,_pData(new T[sz]())
    {
        cout<<"Queue()"<<endl;
    }
    bool emty();
    bool full();
    void push(T value);
    void pop();
    T front();
    T back();
    ~Queue()
    {
        if(_pData!=nullptr)
        {
            delete []_pData;
           _pData=nullptr;
        }
    }
private:
    int _front;
    int _rear;
   // size_t _size;
    T *_pData;
};

template <typename T, size_t sz>
bool Queue<T, sz>::emty()
{
    return _front==_rear;
}

template <typename T, size_t sz>
bool Queue<T, sz>::full()
{
    return (_rear+1)%(int)sz==_front;
}

template <typename T, size_t sz>
void Queue<T, sz>::push(T value)
{
    if(full()==0)
    {
         _pData[_rear]=value;
        _rear=(_rear+1)%(int)sz;
    }
    else
    {
        cout<<"full"<<endl;
    }
}

template <typename T, size_t sz>
void Queue<T, sz>::pop()
{
    if(emty())
    {
        cout<<"empty"<<endl;
    }
    else
    {
        _front=(_front+1)%(int)sz;
    }
}

template <typename T, size_t sz>
T Queue<T, sz>::front()
{
    return _pData[_front];
}

template <typename T, size_t sz>
T Queue<T, sz>::back()
{//要考虑当_rear=0时
    return _pData[(_rear-1+(int)sz)%(int)sz];
}

void test()
{
    Queue<int,5> que;
    cout << "该队是不是空的?" << que.emty() << endl;
    que.push(1);
    cout << "该队是不是满的?" << que.full() << endl;

    for(size_t idx = 2; idx != 5; ++idx)
    {
        que.push(idx);
    }
    cout << "该队是不是满的?" << que.full() << endl;

    while(!que.emty())
    {
        cout << que.front() << endl;
        cout << que.back() << endl;
        que.pop();
    }
    cout << "该队是不是空的?" << que.emty() << endl;
    que.push(1);
    cout << que.back() << endl;
}
int main()
{
    test();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值