博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法---两个栈实现一个队列
阅读量:7230 次
发布时间:2019-06-29

本文共 1444 字,大约阅读时间需要 4 分钟。

其实JS很“流氓的”,JS的数组完全既可以是队列也可以是栈。

因为数组的push,pop就是栈的一组方法嘛。
数据的push,shift就是队列的一组方法嘛。
但是数据结构知识的需要,数据结构中对队列、栈的定义很明确:

  • 栈,先进后出

  • 队列,先进先出

现在要用两个栈实现一个队列,那么首先定义一个栈构造函数吧。

  1. 定义一个栈Stack构造函数

  2. new两个Stack,stack1,stack2

  3. stack1实现队列的进就好了

  4. stack2实现队列的出就好了

    重点来了,进的时候去的是stack1,怎么从stack2出数据呢

  5. 当栈2为空,栈1不为空时,把栈1的数据依次pop出去到栈2中,这样再栈2pop时就是队列应该pop的数据了


上代码:

function Queue(){    var items = [];    function Stack() {        var item = [];        this.push = function (elem) {            item.push(elem);            return item;        };        this.pop = function () {            return item.pop();        };        this.isEmpty = function () {            return item.length === 0;        };        this.get = function () {            return item;        };    }    var stack1 = new Stack();    var stack2 = new Stack();    this.push = function (elem) {        stack1.push(elem);        return items.push(elem);    }    this.pop = function () {        if(stack1.isEmpty() && stack2.isEmpty()){            throw new Error("空队列");        }        if(stack2.isEmpty() && !stack1.isEmpty()){            while(!stack1.isEmpty()){                stack2.push(stack1.pop());            }            return stack2.pop();        }    };    this.get = function () {        if(!stack2.isEmpty()){            return stack2.get().reverse();        }else{            return items;        }    }}var queue = new Queue();queue.push(0);queue.push(1);queue.push(2);queue.get();queue.pop();queue.get();

转载地址:http://mfcfm.baihongyu.com/

你可能感兴趣的文章
node下使用express框架,ejs模板引擎
查看>>
搜索:文本的匹配算法
查看>>
Fedora 17 LibreOffice 办公套件的安装与汉化
查看>>
scrollview不充满屏幕的原因
查看>>
PHP单例模式
查看>>
解密敏捷自动化测试
查看>>
DelphiMVC拦截器介绍
查看>>
Spring Cloud构建微服务架构:分布式配置中心【Dalston版】
查看>>
iOS 11正式版终于来了!强力助攻小程序
查看>>
开放平台API接口调用频率控制系统设计浅谈
查看>>
Lucene4.3进阶开发之潜龙勿用( 七)
查看>>
DTD和schema小总结
查看>>
去掉导航栏的黑线
查看>>
怎样让html加载完毕后加载js代码
查看>>
piwik 案例介绍
查看>>
敏感字过滤
查看>>
为什么我们要从 NodeJS 迁移到 Ruby on Rails
查看>>
Android 文件式数据库Realm
查看>>
Linux 面试知识点笔记
查看>>
论flex布局和box布局的华为meta8手机自带浏览器的兼容
查看>>