/*问题五:用两个栈实现队列。完成队列的push和pop操作,队列中的元素为int类型。*/
/*思路:栈是先进后出,队列是先进先出。本题中一个队列是由两个栈来实现的。首先,元素node1进队,我们可以先压入栈1,然后是node2,接着压入栈1,假设有三个元素入队,
则栈1中有三个元素,node1-3,但是node3在栈顶;然后,元素出队,队列是先进先出,所
以先出的应该是node1,而node1在栈1的最底部,这时注意到,栈2为空,还没有用上,我们
可以将栈1的元素从顶向下依次压入栈2,现在,node1就位于栈2的顶部了,直接pop就可以了。
注意:如果队列一直有进队和出队的操作的话,(进和出的数量不一定相等),假如栈2不为
空,那么我们可以直接pop栈2中的数据,不用将新压入栈1中的数据压入栈2再pop了(新压入
栈2的数据会先被pop出去),因为栈2中原有的数据肯定是最先进入队列的,将栈2中原有的数
据pop出去就可以了。*/
class Solution
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
int a;
if(stack2.empty()){
while(!stack1.empty()){
a = stack1.top();
stack2.push(a);
stack1.pop();
}
}
a = stack2.top();
stack2.pop();
return a;
}
private:
stack<int> stack1;
stack<int> stack2;
};