zoukankan      html  css  js  c++  java
  • (剑指offer) 用两个栈来实现一个队列

    用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

    思路:由于栈是后进先出,所以先依次进入栈1,再从栈1依次弹出到栈2,这样栈1和栈2元素的顺序就正好相反了,然后弹出栈2顶部的元素,就完成了一个先进先出的过程。

    维护两个栈 stack1 和 stack2,其中 stack1 用于存储元素,stack2 用于辅助操作。当栈2不为空时,在栈2顶部的元素是最先进入队列的元素,可以弹出,当栈2为空时把栈1中的元素逐个压入栈2中。

    var Stack1 = []
    var Stack2 = []
    function push(node)
    {
        // write code here
        Stack1.push(node)
        
    
    }
    function pop()
    {
        // write code here
        //判断为空的情况
        if (Stack1.length ==0 && Stack2.length == 0) {
            return false
        }
        if (Stack2.length == 0) {
            while(Stack1.length !==0) {
                Stack2.push(Stack1.pop())
            }
        }
        return Stack2.pop()
    }

    拓展——用两个队列实现一个栈的pop和push操作

    var queue1 = []
    var queue2 = []
    function push (node) {
        //推入的时候要判断哪个队列中有值,就推入那个队列中
        if(queue1.length !== 0) {
            queue1.push(node)
        }else {
            queue2.push(node)
        }
    }
    //假设栈现在有三个元素a,b,c,我们现在要删除c
    function pop () {
        //弹出的时候判断哪个队列中有值,则先将该队列中的n-1个值弹出并存入另一个队列中,然后弹出最后一个值则为结果
        if(queue1.length === 0) {
            while(queue2.length !== 1) {
                queue1.push(queue2.pop()) //依次从queue2中删除元素a,b并且加入到queue1中
            }
            return queue2.pop() //最后再删除
        }else {
            while(queue1.length !== 1) {
                queue2.push(queue1.pop())
            }
            return queue1.pop()
        }
    }
    不积跬步无以至千里
  • 相关阅读:
    详细讲解 关于Linux静态库和动态库的分析
    linux下的共享库(动态库)和静态库
    原子性
    TCP-心跳
    linux alsa pcm(此pcm非硬件pcm接口)
    linux音频 DAPM之二:audio paths与dapm kcontrol
    linux 音频驱动
    imx6qsbd kpp
    nand flash详解及驱动编写
    嵌入式Qt程序启动参数-qws 不需要X11桌面系统
  • 原文地址:https://www.cnblogs.com/lyt0207/p/12512645.html
Copyright © 2011-2022 走看看