#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();
}
类模板——循环队列的实现
最新推荐文章于 2021-10-19 17:30:30 发布