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 相关文章推荐
jQuery 使用手册(三)
Sep 23 Javascript
js下利用控制器载入对应脚本
Jul 17 Javascript
js constructor的实际作用分析
Nov 15 Javascript
jquery学习总结(超级详细)
Sep 04 Javascript
使用JQuery库提供的扩展功能实现自定义方法
Sep 09 Javascript
JavaScript中双叹号!!作用示例介绍
Sep 21 Javascript
详细介绍jQuery.outerWidth() 函数具体用法
Jul 20 Javascript
js实现图片360度旋转
Jan 22 Javascript
Vue+SpringBoot开发V部落博客管理平台
Dec 27 Javascript
Vue.js中对css的操作(修改)具体方式详解
Oct 30 Javascript
vue的路由映射问题及解决方案
Oct 14 Javascript
JS数组属性去重并校验重复数据
Jan 10 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 构造函数construct的前下划线是双的_
2009/12/08 PHP
一个图片地址分解程序(用于PHP小偷程序)
2014/08/23 PHP
php检测apache mod_rewrite模块是否安装的方法
2015/03/14 PHP
JavaScript DOM学习第八章 表单错误提示
2010/02/19 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
Javascript call和apply区别及使用方法
2013/11/14 Javascript
基于nodejs+express(4.x+)实现文件上传功能
2015/11/23 NodeJs
jQuery中fadein与fadeout方法用法示例
2016/09/16 Javascript
Vue项目中最新用到的一些实用小技巧
2018/11/06 Javascript
JS实现网站楼层导航效果代码实例
2020/06/16 Javascript
Python内置的字符串处理函数详细整理(覆盖日常所用)
2014/08/19 Python
python文件操作之目录遍历实例分析
2015/05/20 Python
python中enumerate函数用法实例分析
2015/05/20 Python
Python中常用操作字符串的函数与方法总结
2016/02/04 Python
在Windows中设置Python环境变量的实例讲解
2018/04/28 Python
python批量赋值操作实例
2018/10/22 Python
Python中的元组介绍
2019/01/28 Python
Python安装selenium包详细过程
2019/07/23 Python
pytorch .detach() .detach_() 和 .data用于切断反向传播的实现
2019/12/27 Python
Tensorflow tensor 数学运算和逻辑运算方式
2020/06/30 Python
Python爬虫后获取重定向url的两种方法
2021/01/19 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
美国在线家装零售商:Build.com
2016/09/02 全球购物
汉森冲浪板:Hansen Surfboards
2018/05/19 全球购物
可打印的优惠券、杂货和优惠券代码:Coupons.com
2018/06/12 全球购物
商场消防管理制度
2014/01/12 职场文书
大学生旷课检讨书
2014/01/22 职场文书
关于逃课的检讨书
2014/01/23 职场文书
幼师自我鉴定
2014/02/01 职场文书
工程类专业自荐信范文
2014/03/09 职场文书
企业安全生产月活动总结
2014/07/05 职场文书
人力资源管理求职信
2014/08/07 职场文书
导游词之临安白水涧
2019/11/05 职场文书
Python自动化之批量处理工作簿和工作表
2021/06/03 Python
68行Python代码实现带难度升级的贪吃蛇
2022/01/18 Python
详解nginx安装过程并代理下载服务器文件
2022/02/12 Servers