由两个栈实现一个队列,支持队列的基本操作 | 刷题打卡

270 阅读1分钟

一、题目描述💯

  • 由两个栈实现一个队列,支持队列的基本操作(add,poll,peek)

二、思路分析🤔

1.由stackPush压入stackPop时,要将stackPush全部压入 2.出队时,如果stackPop有元素,不需要将stackPop压入

三、代码实现🌂

let stackPush = []
let stackPop = []
//入队如果队列已满,抛出异常
function add(ele){
   stackPush.unshift(ele)
}
// poll:将首个元素从队列中弹出,如果队列是空的,就返回null
function poll(){
   if(stackPop[0]){
       return stackPop.shift()
   }else if(stackPush[0]){
       for (let index = 0; stackPush.length>0; index++) {
           let  ele = stackPush.shift()
           stackPop.unshift(ele)   
       }
       return stackPop.shift()
   }else{
       return null
   }
}

//查看首个元素,不会移除首个元素,如果队列是空的就返回null
function peek(){
   if(stackPop[0]){
       return stackPop[0]
   }else if(stackPush[0]){
       for (let index = 0; stackPush.length>0; index++) {
           let  ele = stackPush.shift()
           stackPop.unshift(ele)   
       }
       return stackPop[0]
   }else{
       return null
   }
}

四、简单测试🧪

let arr1= [5,6,4,3,1]
for (let ind = 0; ind < arr1.length; ind++) {
    const ele = arr1[ind];
    add(ele)
}S
console.log(stackPush)
console.log(poll())
console.log(peek())

代码下载地址

感谢🙇‍

点赞支持👍