用两个栈来实现一个队列,完成队列的push和pop操作,队列中的元素为int类型 (js版)

思路:

首先明白栈是先进后出,队列是先进先出

1::准备两个空的存储单元,原始originArr为空数组,目标targetArr也是空数组,

2:将数据push到原始数组中,并且返回push进去的数据,此时,push操作完成

3:因为现在是栈操作,所将原始数组的数据pop到目标数组中,按照先进后出的原则,如果原始数组进栈的顺序是1,2,3,那么出栈的顺序是3,2,1,此时需要遍历数组,因为长度有限,不可能一直push,一直pop。将原始数组pop出来,push到目标数组 代码如下:targetArr.push(originArr.pop())

4 接下来就是将两个栈来实现一个队列的关键操作,即将栈的先进后出转化为队列的先进先出(比如入栈 顺序是1,2,3,出栈是3,2,1现在要转化成队列,那么出队顺序就是1,2,3) 代码如下originArr.push(targetArr.pop()) 。注:每次在操作完毕,一定要返回结果

5:在控制台push(1),[1]

push(2),[1,2]

push(3)[1,2,3]

pop()  1

pop() 2

pop() 3   此结果就证明两个栈实现一个队列,完成队列的push和pop操作 

<script>

var originArr = [];
var targetArr = [];
function push(node)
{
    if(node)
    {
        originArr.push(node);
    }
    return originArr;
}
function pop(){
    var originLen = originArr.length;
    var targetLen = targetArr.length;
    for(var i = 0 ; i<originLen;i++)
    {
        targetArr.push(originArr.pop());
    }
    var result = targetArr.pop();
    for(var j = 0; j <targetLen ; j++)
    {
        originArr.pop(targetArr.push());
    }
    return result;

}

</script>

猜你喜欢

转载自blog.csdn.net/qq_38845858/article/details/81259350
今日推荐