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

编程入门 行业动态 更新时间:2024-10-19 12:39:50

《剑指Offer》JavaScript实战——用两个栈实现<a href=https://www.elefans.com/category/jswz/34/1771257.html style=队列"/>

《剑指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.shift());}return queue2.shift();}else{while(queue1.length !== 1){queue2.push(queue1.shift());}return queue1.shift();}
}

更多推荐

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

本文发布于:2024-03-06 14:19:54,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1715530.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:队列   剑指   实战   两个   JavaScript

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!