资讯专栏INFORMATION COLUMN

【转】《剑指Offer》JavaScript实战——用两个栈实现队列

senntyou / 2021人阅读

摘要:题目描述用两个栈来实现一个队列,完成队列的和操作。队列中的元素为类型。下面是实现代码。

题目描述

    用两个栈来实现一个队列,完成队列的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();
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/102964.html

相关文章

  • 剑指offer/LintCode494_两个队列实现一个

    摘要:剑指用两个队列实现一个栈声明文章均为本人技术笔记,转载请注明出处解题思路实现功能用两个队列实现一个栈,实现,,和方法解题思路假设有队列和实现栈的操作实现栈操作始终用来入队实现实现栈的方法模拟栈的过程中,保证两个队列中始终有一个队列为空,另一 剑指offer/LintCode494_用两个队列实现一个栈 声明 文章均为本人技术笔记,转载请注明出处https://segmentfault....

    rose 评论0 收藏0
  • 剑指offer/LintCode40_两个模拟队列

    摘要:剑指用两个栈模拟队列声明文章均为本人技术笔记,转载请注明出处解题思路实现功能用两个栈模拟实现一个队列的,和操作解题思路假设有两个栈队列实现始终用入栈实现队列和实现由于依次出栈并压入中,恰好保证中顺序与模拟队列顺序一致,始终保证栈顶元素为模拟 剑指offer/LintCode40_用两个栈模拟队列 声明 文章均为本人技术笔记,转载请注明出处https://segmentfault.com...

    bawn 评论0 收藏0
  • 剑指offer】6.两个实现队列

    摘要:题目用两个栈来实现一个队列,完成队列的和操作。队列中的元素为类型。基本思路栈用于入队列存储栈出队列时将栈的数据依次出栈,并入栈到栈中栈出栈即栈的底部数据即队列要出的数据。注意栈为空才能补充栈的数据,否则会打乱当前的顺序。 题目 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 基本思路 栈1: 用于入队列存储 栈2: 出队列时将栈1的数据依次出栈,并...

    fredshare 评论0 收藏0
  • #yyds干货盘点#剑指 Offer 09. 两个实现队列

    摘要:题目用两个栈实现一个队列。队列的声明如下,请实现它的两个函数和,分别完成在队列尾部插入整数和在队列头部删除整数的功能。删除此堆栈顶部的对象,并将该对象作为此函数的值返回。 题目用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和...

    RichardXG 评论0 收藏0
  • 剑指offer(javascript版)

    摘要:二维数组中的查找在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。例如输入前序遍历序列和中序遍历序列,则重建二叉树并返回。 1.二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数...

    imtianx 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<