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 arguments 传递给函数的隐含参数
Aug 21 Javascript
JavaScript isArray()函数判断对象类型的种种方法
Oct 11 Javascript
jQuery中:empty选择器用法实例
Dec 30 Javascript
JQuery限制复选框checkbox可选中个数的方法
Apr 20 Javascript
js获取时间精确到秒(年月日)
Mar 16 Javascript
Bootstrap开发实战之响应式轮播图
Jun 02 Javascript
微信小程序 location API实例详解
Oct 02 Javascript
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
Nov 27 Javascript
js中let和var定义变量的区别
Feb 08 Javascript
js 数组详细操作方法及解析合集
Jun 01 Javascript
vue swipe自定义组件实现轮播效果
Jul 03 Javascript
vue拖拽组件 vuedraggable API options实现盒子之间相互拖拽排序
Jul 08 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
PHP反向代理类代码
2014/08/15 PHP
php源码分析之DZX1.5加密解密函数authcode用法
2015/06/17 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
2016/05/23 PHP
简单解析PHP程序的运行流程
2016/06/23 PHP
php阳历转农历优化版
2016/08/08 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
laravel自定义分页的实现案例offset()和limit()
2019/10/15 PHP
jQuery 自定义函数写法分享
2012/03/30 Javascript
Node.js文件操作详解
2014/08/16 Javascript
jquery判断复选框是否被选中的方法
2015/10/16 Javascript
全面了解javascript中的错误处理机制
2016/07/18 Javascript
十个免费的web前端开发工具详细整理
2017/09/18 Javascript
学习jQuery中的noConflict()用法
2018/09/28 jQuery
jquery拖拽自动排序插件使用方法详解
2020/07/20 jQuery
vue实现全匹配搜索列表内容
2019/09/26 Javascript
基于JS判断对象是否是数组
2020/01/10 Javascript
Python ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
2014/06/10 Python
Python 读写文件的操作代码
2018/09/20 Python
Python面向对象基础入门之编码细节与注意事项
2018/12/11 Python
在python中将list分段并保存为array类型的方法
2019/07/15 Python
pytorch 固定部分参数训练的方法
2019/08/17 Python
django-rest-swagger的优化使用方法
2019/08/29 Python
Python实现把类当做字典来访问
2019/12/16 Python
pytorch AvgPool2d函数使用详解
2020/01/03 Python
python suds访问webservice服务实现
2020/06/26 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
2020/07/03 Python
Python如何创建装饰器时保留函数元信息
2020/08/07 Python
意大利和国际最佳时尚品牌:Drestige
2019/12/28 全球购物
应届生污水处理求职信
2013/11/06 职场文书
学习张丽丽心得体会
2014/09/03 职场文书
竞选大队干部演讲稿
2014/09/11 职场文书
2015年教师节演讲稿范文
2015/03/19 职场文书
2015年计划生育协会工作总结
2015/05/13 职场文书
家长对学校的意见和建议
2015/06/03 职场文书
机关干部纪律作风整顿心得体会
2016/01/23 职场文书
表扬稿表扬信的格式及范文
2019/06/24 职场文书