實現迴圈佇列的基本操作
阿新 • • 發佈:2019-01-30
template<typename T>
class Queue
{
public:
Queue(size_t capacity = 5)
:_front(0)
,_rear(0)
,_capacity(capacity+3)//加一個常數防止傳參為0程式奔潰
,_count(0)
{
_pData = new T[_capacity];//開闢空間
}
void Push(const T& x)
{
if(_count != _capacity)//如果佇列不滿
{
_pData[_rear] = x;
_count++;//插入後佇列中元素個數加一
_rear = (_rear+1)%_capacity;//因為是迴圈佇列所以得模它的容量
}
}
void Pop()
{
if(!Empty())//佇列不空
{
_count--;
_front = (_front+1)%_capacity;
}
}
T& Front()
{
return _pData[_front];
}
const T& Front()const
{
return _pData[_front];
}
T& Back()
{
return _pData[(_rear-1)%_capacity];//模容量防止_rear減完變成負數
}
const T& Back()const
{
return _pData[(_rear-1)%_capacity];
}
size_t Size()
{
return _count;
}
bool Empty()const
{
return 0 == _count;
}
private:
T* _pData;
size_t _front;
size_t _rear;
size_t _capacity;
size_t _count;
};
int main()
{
Queue<int> q;
q.Push(1);
q.Push(2);
q.Push(3);
q.Push(4);
cout<<q.Front()<<endl;
cout<<q.Back()<<endl;
q.Pop();
q.Pop();
cout<<q.Front()<<endl;
cout<<q.Size()<<endl;
cout<<q.Back()<<endl;
q.Pop();
q.Pop();
cout<<q.Empty()<<endl;
cout<<q.Size()<<endl;
system("pause");
return 0;
}
程式執行截圖