用两个栈实现队列

题:用两个栈来实现一个队列,完成队列的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个放入另一个队列中,剩下的一个出队列,重复上述过程,即可。

原文地址:https://www.cnblogs.com/love-yh/p/7357274.html