JavaScipt中栈的实现方法


Posted in Javascript onFebruary 17, 2016

接下来就是数据结构的第一部分,
是一种遵从后进先出原则(LIFO,全称为Last In First Out)的有序集合。栈顶永远是最新的元素。
举个例子就是:栈就像放在箱子里的一叠书 你要拿下面的书先要把上面的书拿开。(当然,你不能先拿下面的书)
看图示也可明白。

JavaScipt中栈的实现方法

JavaScipt中栈的实现
首先,创建一个构造函数。

/**
 * 栈的构造函数
 */
function Stack() {

 // 用数组来模拟栈
 var item = [];
}

栈需要有如下的方法:

  • push(element(s)): 添加几个元素到栈顶
  • pop(): 移除并返回栈顶元素
  • peek(): 返回栈顶元素
  • isAmpty: 检查栈是否为空,为空则返回true
  • clear: 移除栈中所有元素
  • size: 返回栈中元素个数。
  • print: 以字符串显示栈中所有内容

push方法的实现
说明: 需要往栈中添加新元素,元素位置在队列的末尾。也就是说,我们可以用数组的push方法来模拟实现。
实现:

/**
 * 将元素送入栈,放置于数组的最后一位
 * @param {Any} element 接受的元素,不限制类型
 */
this.push = function(element) {
 items.push(element);
};

pop方法的实现
说明: 需要把栈顶元素弹出,同时返回被弹出的值。可以用数组的pop方法来模拟实现。
实现:

/**
 * 弹出栈顶元素
 * @return {Any} 返回被弹出的值
 */
this.pop = function() {
 return items.pop();
};

peek方法的实现
说明: 查看栈顶元素,可以用数组长度来实现。
实现:

/**
 * 查看栈顶元素
 * @return {Any} 返回栈顶元素
 */
this.peek = function() {
 return items[items.length - 1];
}

其余方法的实现
说明: 前三个是栈方法的核心,其余方法则在此一次性列出。因为下文要讲的队列,会与这部分有很大重合。
实现:

/**
 * 确定栈是否为空
 * @return {Boolean} 若栈为空则返回true,不为空则返回false
 */
this.isAmpty = function() {
 return items.length === 0
};

/**
 * 清空栈中所有内容
 */
this.clear = function() {
 items = [];
};

/**
 * 返回栈的长度
 * @return {Number} 栈的长度
 */
this.size = function() {
 return items.length;
};

/**
 * 以字符串显示栈中所有内容
 */
this.print = function() {
 console.log(items.toString());
};

实际应用
栈的实际应用比较多,书中有个十进制转二进制的函数。(不懂二进制怎么算的话可以百度)下面是函数的源代码。
原理就是输入要转换的数字,不断的除以二并取整。并且最后运用while循环,将栈中所有数字拼接成字符串输出。

/**
 * 将10进制数字转为2进制数字
 * @param {Number} decNumber 要转换的10进制数字
 * @return {Number}      转换后的2进制数字
 */
function divideBy2(decNumber) {

 var remStack = new Stack(),
  rem,
  binaryString = '';

 while (decNumber > 0) {
  rem = Math.floor(decNumber % 2);
  remStack.push(rem);
  decNumber = Math.floor(decNumber / 2);
 }

 while (!remStack.isAmpty()) {
  binaryString += remStack.pop().toString();
 }

 return binaryString;
};

到此而言,栈的学习就告一段落了,希望对大家学习javascript中栈的实现方法有所帮助。

Javascript 相关文章推荐
通过event对象的fromElement属性解决热区设置主实体的一个bug
Dec 22 Javascript
Javascript insertAfter() 实现函数代码
Oct 12 Javascript
求数组最大最小值方法适用于任何数组
Aug 16 Javascript
利用原生JavaScript获取元素样式只是获取而已
Oct 08 Javascript
jQuery实现提示密码强度的代码
Jul 15 Javascript
js针对ip地址、子网掩码、网关的逻辑性判断
Jan 06 Javascript
详谈JS中数组的迭代方法和归并方法
Aug 11 Javascript
在vue项目中,使用axios跨域处理
Mar 07 Javascript
微信小程序form表单组件示例代码
Jul 15 Javascript
从源码里了解vue中的nextTick的使用
Nov 22 Javascript
深入理解 TypeScript Reflect Metadata
Dec 12 Javascript
关于JavaScript回调函数的深入理解
Jun 27 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
Feb 17 #Javascript
Bootstrap入门书籍之(四)菜单、按钮及导航
Feb 17 #Javascript
Bootstrap入门书籍之(三)栅格系统
Feb 17 #Javascript
Bootstrap入门书籍之(一)排版
Feb 17 #Javascript
Bootstrap入门书籍之(零)Bootstrap简介
Feb 17 #Javascript
分享自己用JS做的扫雷小游戏
Feb 17 #Javascript
javascript瀑布流布局实现方法详解
Feb 17 #Javascript
You might like
AJAX for PHP简单表数据查询实例
2007/01/02 PHP
PHP微信开发之查询城市天气
2016/06/23 PHP
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
2008/09/08 Javascript
10个新的最有前途的JavaScript框架
2009/03/12 Javascript
原生Js实现按的数据源均分时间点幻灯片效果(已封装)
2010/12/28 Javascript
javascript中运用闭包和自执行函数解决大量的全局变量问题
2010/12/30 Javascript
jQuery contains过滤器实现精确匹配使用方法
2013/04/12 Javascript
ExtJS如何设置与获取radio控件的选取状态
2014/01/22 Javascript
JQuery调用绑定click事件的3种写法
2015/03/28 Javascript
JavaScript简单判断复选框是否选中及取出值的方法
2015/08/13 Javascript
JavaScript ParseFloat()方法
2015/12/18 Javascript
JavaScript中的this引用(推荐)
2016/08/05 Javascript
Vue.set()动态的新增与修改数据,触发视图更新的方法
2018/09/15 Javascript
微信小程序实现下拉菜单切换效果
2020/03/30 Javascript
jQuery动态操作表单示例【基于table表格】
2018/12/06 jQuery
简单两步使用node发送qq邮件的方法
2019/03/01 Javascript
webpack 处理CSS资源的实现
2019/09/27 Javascript
vue项目中定义全局变量、函数的几种方法
2019/11/08 Javascript
国内常用的js类库大全(CDN公共库)
2020/06/24 Javascript
[01:30]我们共输赢 完美世界城市挑战赛开启全新赛季
2019/04/19 DOTA
python中使用%与.format格式化文本方法解析
2017/12/27 Python
python学习入门细节知识点
2018/03/29 Python
Numpy之random函数使用学习
2019/01/29 Python
解决Python中定时任务线程无法自动退出的问题
2019/02/18 Python
python写程序统计词频的方法
2019/07/29 Python
python 实现快速生成连续、随机字母列表
2019/11/28 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
2020/05/16 Python
Python读取Excel一列并计算所有对象出现次数的方法
2020/09/04 Python
python 如何设置守护进程
2020/10/29 Python
Python经典五人分鱼实例讲解
2021/01/04 Python
html5的画布canvas——画出弧线、旋转的图形实例代码+效果图
2013/06/09 HTML / CSS
会计专业自荐信
2013/12/02 职场文书
施工员岗位职责
2014/03/16 职场文书
2015年医院药剂科工作总结
2015/05/04 职场文书
家访教师心得体会
2016/01/23 职场文书
python - asyncio异步编程
2021/04/06 Python