Loading

剑指offer[5]——用两个栈实现队列

题目描述

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

我们先来了解一下什么是队列和栈。

对队列的理解就像你在排队,排队只能从尾部进去,头部出去,你不能插队,只能按照规则来,遵循先进先出的原则。而栈不一样的是只有一个出入口,进去只能从尾部进去,出去也只能从尾部出去,这个时候你进去的早反而出去的比较晚,遵循先进后出的原则。

题目的要求很简单,就是利用两个栈实现一个队列。我们就会想用一个栈来存储,另一个栈作为临时利用,就是说执行PUSH函数的时候和栈的PUSH是一样的,直接调用即可。但是POP的话就不太一样,队列是从栈底出去,所以这个时候就要求我们利用另一个栈,把存储栈中的元素依次POP到临时栈中,全部移过去之后再执行POP函数即可实现将栈底的元素弹出,代码如下:

let arr1 = [];
let arr2 = [];
function push(node)
{
    arr1.push(node);
}
function pop()
{
    for(let i=0; i<arr1.length; i++){
        arr2.push(arr1[arr1.length-i-1]);
    }
    const num = arr2.pop();
    arr1 = [];
    for(let i=0; i<arr2.length; i++){
        arr1.push(arr2[arr2.length-i-1]);
    }
    arr2 = [];
    return num;
}
posted @ 2020-03-05 11:35  Jacob是我了  阅读(113)  评论(0编辑  收藏  举报