一、题目描述💯
- 由两个栈实现一个队列,支持队列的基本操作(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())