两个栈实现一个队列:

template<classT>classCQueue{public:voidPush(constT&element){stack1.push(element);}voidPop(){if(stack2.empty()){while(!stack1.empty()){stack2.push(stack1.top());stack1.pop();}}if(stack2.empty()){cout<<"queueisempty"<<endl;assert(false);}stack2.pop();}boolEmpty(){if(stack1.empty()&&stack2.empty())returntrue;elsereturnfalse;}TFront(){if(!stack2.empty()){returnstack2.top();}else{while(!stack1.empty()){stack2.push(stack1.top());stack1.pop();}if(stack2.empty()){cout<<"queueisempty"<<endl;assert(false);}returnstack2.top();}}private:stack<T>stack1;stack<T>stack2;};



两个队列实现一个栈:

template<classT>classCStack{public:voidPush(constT&element){queue1.push(element);}voidPop(){if(queue1.empty()){cout<<"stackisempty"<<endl;assert(false);}while(queue1.size()!=1){queue2.push(queue1.front());queue1.pop();}queue1.pop();while(!queue2.empty()){queue1.push(queue2.front());queue2.pop();}}boolEmpty(){if(queue1.empty())returntrue;elsereturnfalse;}TTop(){if(queue1.empty()){cout<<"stackisempty"<<endl;assert(false);}returnqueue1.back();}private:queue<T>queue1;queue<T>queue2;};