【转】《剑指Offer》JavaScript实战——用两个栈完成行列

问题形貌

    用两个栈来完成一个行列,完成行列的Push和Pop操纵。 行列中的元素为int范例。

解题要领

let stack1=[],//两个数组模仿栈的行动
    stack2=[];
function push(node)
{
    // write code here
    //栈是后入先出(LIFO),行列是先入先出(FIFO)
    //模仿行列的push操纵,直接往栈中推入即可
    //然则要斟酌辅佐栈中还存在值的状况,须要先将辅佐栈中的值推回存储栈中
    while(stack2.length !== 0){
        stack1.push(stack2.pop());
    }
    stack1.push(node);
}
function pop()
{
    // write code here
    //模仿行列的pop操纵则要斟酌栈的后入先出特征,须要先将存储栈中的数组,推入辅佐栈,然后辅佐栈弹出
    while(stack1.length !== 0){
        stack2.push(stack1.pop());
    }
    return stack2.pop();
}

拓展——用两个行列完成一个栈的pop和push操纵

    本质上和上面的没什么区分,只需捉住一点,栈是后入先出(LIFO),行列是先入先出(FIFO)。下面是完成代码。

let queue1=[],//两个数组模仿行列的行动
    queue2=[];
function push(node) {
    //推入的时刻要推断哪一个行列中有值,就推入谁人行列中
    if(queue1.length === 0){
        queue2.push(node);
    }else{
        queue1.push(node);
    }
}
 
function pop() {
    //弹出的时刻推断哪一个行列中有值,则先将该行列中的n-1个值弹出并存入另一个行列中,然后弹出末了一个值则为效果
    if(queue1.length === 0){
        while(queue2.length !== 1){
            queue1.push(queue2.pop());
        }
        return queue2.pop();
    }else{
        while(queue1.length !== 1){
            queue2.push(queue1.pop());
        }
        return queue1.pop();
    }
}

    原文作者:liaojin1
    原文地址: https://segmentfault.com/a/1190000018650785
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞