用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

Posted 转瞬即逝1995

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。相关的知识,希望对你有一定的参考价值。

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

思路:

    1. 首先要明确队列的特性是先进先出,栈的特性是先进后出;
    2. 在进队列的方法里我们只要有容器能装元素就行了,所以直接往栈1里压;
    3. 在出队列方法里,要保证出队列的是最先进入的元素:
      • 最直观的想法就是把栈1的元素挨个出栈,然后往栈2里压。
    4. 但是还是要思考一下真的这么简单吗?不是的,栈2为空时才允许栈1往外弹元素并压到栈2里。
      • 如果随时都可以往栈2里压,那么往栈1里压两个元素5、6(栈1状态是:{5,6}),马上出栈往栈2里压(栈2状态:{6,5});
      • 接着栈1又来了个元素7,栈2的元素5、6还没出栈,此时要是再把7压到栈2那么栈顶元素就变7了,没法先取出5;
      • 所以在往栈2压完一批元素后,栈1进了新的元素想往栈2压的时候,栈2必须把上一批的元素清空了才行(也就是栈2必须是空的)。

public:
void push(int node) {
   stack1.push(node); //stack1存入该数
}

int pop() {
   int res;
   if (stack2.size() > 0) {  //stack2不为空
     res = stack2.top();  //取值stack2的第一个元素
      stack2.pop();  //删除stack2的第一个元素
   }
  else if (stack1.size() > 0) {  //stack1不为空
    while (stack1.size() > 0) { 
      int ele = stack1.top(); //取值stack1的第一个元素

      stack1.pop(); //删除stack1的第一个元素

      stack2.push(ele); //将stack1的第一个元素赋值给stack2  这里是将stack1的元素存入stack2 ,stack1,2都为为先进后出,将顺序调整为了先进先出
    }
    res = stack2.top(); //取值stack2的第一个元素
    stack2.pop(); //删除stack2的第一个元素
  }
  return res;
}

private:
stack<int> stack1;
stack<int> stack2;
};

思路和题解都是借鉴别人的  要好好理解理解

以上是关于用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。的主要内容,如果未能解决你的问题,请参考以下文章

算法:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。《剑指offer》

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型

算法用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

一张图展示:用两个栈来实现一个队列,完成队列的Push和Pop操作