用两个栈实现队列
题:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
思路:栈为先进后出,队列为先进先出。大致思想是,先将元素放入栈1中,然后将栈1的元素,全部放入栈2中。值得注意的是,当栈2中有元素时,应先出栈,然后才能将栈1的元素放入栈2中;若还想将元素放入栈1,从而再放入栈2中,应该等等栈1中的元素为空了,才能放,不然会影响顺序。
1 class Solution 2 { 3 public: 4 void push(int node) 5 { 6 stack1.push(node); //代码区 7 } 8 9 int pop() 10 { 11 if(stack2.empty()) //代码区 12 { 13 while(!stack1.empty()) 14 { 15 stack2.push(stack1.top()); 16 stack1.pop(); 17 } 18 } 19 int res=stack2.top(); 20 stack2.pop(); 21 return res; // 22 } 23 24 private: 25 stack<int> stack1; 26 stack<int> stack2; 27 };
扩展:用两个队列实现一个栈
下面结合“abc”的入栈和出栈进行说明:
1、先将“abc”压入队列1,如图:
2、将"ab“压入队列2,如图:
3、"c“出栈,这就相当于出栈了,然后将a,压入队列1,队列2中b出队列,相当于b出栈,最后a出队列。
总结,即将队列中的前n-1个放入另一个队列中,剩下的一个出队列,重复上述过程,即可。