题目:两个单向队列构成一个栈
//两个队列构成一个栈 //StackWithTwoQueues #include<queue> //STL #include<iostream> using namespace std; template<class T> class BStack { public: BStack(); ~BStack(); void InStack(const T& elem); T OutStack(); private: queue<T> q1; queue<T> q2; }; //思路:一个队列空,另一个队列则‘入栈’操作; // 在删除‘栈顶’时,先对非空队列前n-1个元素出队、入队到另一队列, // 最后元素为待删‘栈顶’ template<class T> BStack<T>::BStack() { } template<class T> BStack<T>::~BStack() { } template<class T> void BStack<T>::InStack(const T& elem) { if(!q2.empty()) q2.push(elem); else q1.push(elem); } template<class T> T BStack<T>::OutStack() { T data; T top; if(!q1.empty()) { while(q1.size() > 1) { data = q1.front(); q1.pop(); q2.push(data); } top = q1.front(); q1.pop(); } else if(!q2.empty()) { while(q2.size() > 1) { data = q2.front(); q2.pop(); q1.push(data); } top = q2.front(); q2.pop(); } else { cerr<<"Stack is empty!"<<endl; exit(1); } return top; }
与作者提供思路一致!