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 相关文章推荐
Javascript 函数对象的多重身份
Jun 28 Javascript
JS getStyle获取最终样式函数代码
Apr 01 Javascript
基于jquery ajax 用户无刷新登录方法详解
Apr 28 Javascript
jquery获取css的color值返回RGB的方法
Dec 18 Javascript
AngularJS入门教程之表格实例详解
Jul 27 Javascript
JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍
Nov 10 Javascript
不使用JavaScript实现菜单的打开和关闭效果demo
May 01 Javascript
Vue实现按钮旋转和移动位置的实例代码
Aug 09 Javascript
谈谈为什么你的 JavaScript 代码如此冗长
Jan 30 Javascript
JavaScript实现图片轮播特效
Oct 23 Javascript
jquery实现上传图片功能
Jun 29 jQuery
vue使用echarts图表自适应的几种解决方案
Dec 04 Vue.js
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
php 文件上传代码(限制jpg文件)
2010/01/05 PHP
PHP弹出提示框并跳转到新页面即重定向到新页面
2014/01/24 PHP
PHP explode()函数的几个应用和implode()函数有什么区别
2015/11/05 PHP
PHP常用的类封装小结【4个工具类】
2019/06/28 PHP
php实现银联商务公众号+服务窗支付的示例代码
2019/10/12 PHP
JSON 教程 json入门学习笔记
2020/09/22 Javascript
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
2013/02/18 Javascript
js中switch case循环实例代码
2013/12/30 Javascript
实例说明为什么不要行内使用javascript
2014/04/18 Javascript
JavaScript中的方法调用详细介绍
2014/12/30 Javascript
Javascript 拖拽的一些简单的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
jQuery Chart图表制作组件Highcharts用法详解
2016/06/01 Javascript
JavaScript Promise 用法
2016/06/14 Javascript
AngularJS 输入验证详解及实例代码
2016/07/28 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
jQuery Validate 数组 全部验证问题
2017/01/12 Javascript
JQuery 封装 Ajax 常用方法(推荐)
2017/05/21 jQuery
vue 打包后的文件部署到express服务器上的方法
2017/08/09 Javascript
laravel5.3 vue 实现收藏夹功能实例详解
2018/01/21 Javascript
微信小程序之自定义组件的实现代码(附源码)
2018/08/02 Javascript
JavaScript常见继承模式实例小结
2019/01/11 Javascript
通过实例解析json与jsonp原理及使用方法
2020/09/27 Javascript
[05:59]2018DOTA2国际邀请赛寻真——只为胜利的Secret
2018/08/13 DOTA
Django 自定义权限管理系统详解(通过中间件认证)
2020/03/11 Python
python numpy库np.percentile用法说明
2020/06/08 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
解决Pycharm 运行后没有输出的问题
2021/02/05 Python
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
洲际酒店集团美国官网:IHG美国
2017/11/16 全球购物
精油和天然健康美容产品:Art Naturals
2018/01/27 全球购物
全球速卖通俄罗斯站:AliExpress俄罗斯
2019/06/17 全球购物
电气专业推荐信范文
2013/11/18 职场文书
党员群众路线整改措施及今后努力方向
2014/10/28 职场文书
工程竣工验收申请报告
2015/05/15 职场文书
vue3.0 数字翻牌组件的使用方法详解
2022/04/20 Vue.js