实现循环队列的基本操作

来源:互联网 发布:免费服装店收银软件 编辑:程序博客网 时间:2024/05/29 03:58
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;}

程序运行截图


0 0
原创粉丝点击