两个栈实现一个队列
栈的特点:先进后出
队列特点:先进先出
//实现两个栈实现一个队列//每次都push到_s1中,pop从_s2,提高效率(每次不用互相倒栈)
#pragmaonce#include<iostream>#include<stack>#include<queue>#include<assert.h>usingnamespacestd;template<classT>classQueue{public:voidPush(constT&x){_s1.push(x);}voidPop(){if(_s2.empty()){while(!_s1.empty()){_s2.push(_s1.top());_s1.pop();}}//断言当_s2为空时,不执行(库中实现_s2.pop()也已断言,实不实现都行!!!)防止自己实现的栈出错assert(!_s2.empty());_s2.pop();}boolEmpty(){return_s1.empty()&&_s2.empty();}intSize(){return_s1.size()+_s2.size();}T&Front(){if(_s2.empty()){while(!_s1.empty()){_s2.push(_s1.top());_s1.pop();}}assert(!_s2.empty());return_s2.top();}T&Back(){if(_s1.empty()){while(!_s2.empty()){_s1.push(_s2.top());_s2.pop();}}assert(_s1.empty());return_s1.top();}protected:stack<T>_s1;stack<T>_s2;};voidTest1(){Queue<int>q1;q1.Push(1);q1.Push(2);q1.Push(3);q1.Push(4);q1.Push(5);q1.Push(6);q1.Pop();q1.Pop();q1.Pop();q1.Pop();q1.Pop();q1.Pop();//q1.Pop();//cout<<q1.Front()<<endl;//cout<<q1.Back()<<endl;//cout<<q1.Empty()<<endl;cout<<q1.Size()<<endl;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。