思路

a.插入:哪个队列中有数据就插入哪个队列

b.删除:把存在数据的队列弹出并压入另一队列,且只留最后一个数据,并且删除最后一个。

//test2.h#include<iostream>#include<queue>usingnamespacestd;template<classT>classstackWithTwoQueue{public:stackWithTwoQueue();~stackWithTwoQueue();voidaddHead(constT&data);TdeleteTail();private:queue<T>q1;queue<T>q2;};//test2.cpp#include"test1.h"usingnamespacestd;template<classT>stackWithTwoQueue<T>::stackWithTwoQueue(){}template<classT>stackWithTwoQueue<T>::~stackWithTwoQueue(){}//哪个里有数据就加到哪个里template<classT>voidstackWithTwoQueue<T>::addHead(constT&data){if(!q2.empty()){q2.push(data);}else{q1.push(data);}}//谁不为空就把它倒到另一个队列再直到只剩一个,最后删除那个template<classT>TstackWithTwoQueue<T>::deleteTail(){if(q1.empty()&&q2.empty()){cout<<"stackisempty!\n"<<endl;return-1;}if(!q1.empty()){while(q1.size()!=1){Tfront=q1.front();q1.pop();q2.push(front);}Ttail=q1.front();q1.pop();returntail;}elseif(!q2.empty()){while(q2.size()!=1){Tfront=q2.front();q2.pop();q1.push(front);}Ttail=q2.front();q2.pop();returntail;}}voidtest1(){stackWithTwoQueue<int>sw;sw.addHead(1);sw.addHead(2);sw.addHead(3);cout<<sw.deleteTail()<<endl;cout<<sw.deleteTail()<<endl;cout<<sw.deleteTail()<<endl;cout<<sw.deleteTail()<<endl;}voidtest2(){stackWithTwoQueue<int>sw;sw.addHead(1);sw.addHead(2);sw.addHead(3);cout<<sw.deleteTail()<<endl;sw.addHead(4);cout<<sw.deleteTail()<<endl;cout<<sw.deleteTail()<<endl;cout<<sw.deleteTail()<<endl;}intmain(){//test1();test2();system("pause");return0;}