zoukankan      html  css  js  c++  java
  • 《剑指offer》— JavaScript(5)用两个栈实现队列

    用两个栈实现队列

    题目描述

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


    实现代码

    function Stack(){
        var items=[];
        this.push=function(item){
            items.push(item);
        }
        this.pop=function(){
            return items.pop();
        }
        this.isEmpty=function(){
            return items.length==0;
        }
    }
    
    
    var stack1= new Stack();
    var stack2= new Stack();
    
    function push(node)
    {
        stack1.push(node);
    }
    function pop()
    {   
        //如果都为空,抛出错误
        if(stack1.isEmpty() && stack2.isEmpty()){
            throw new Error("Queue is empty");
        }
       // 如果栈2是空,那么将栈1所有元素出栈,一次放入栈2
        if(stack2.isEmpty()){
            while(!stack1.isEmpty()){
                 stack2.push(stack1.pop())
            }
        }
       //如果栈2不为空,直接出栈
        return stack2.pop();
    }

    思路

      入队:将元素进栈1;
      出队:判断栈2是否为空,如果为空,则将栈1中所有元素pop,并push进栈2,栈2出栈; 如果不为空,栈2直接出栈。

    相关知识

      栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
      队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。

  • 相关阅读:
    vuex
    JS判断浏览器类型和详细区分IE各版本浏览器
    javascript json对象操作(基本增删改查)
    react 使用antd 按需加载
    vue-cli 3.0 豆瓣api接口使用element做分页
    vue-cli 3.0 使用axios配置跨域访问豆瓣接口
    es6之扩展运算符 三个点(...)
    Vue.js——十分钟入门Vuex
    js数组的处理使用
    如何发布自己模块到NPM
  • 原文地址:https://www.cnblogs.com/t1amo/p/7093780.html
Copyright © 2011-2022 走看看