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 相关文章推荐
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
Aug 06 Javascript
JavaScript中字面量与函数的基本使用知识
Oct 20 Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
Mar 14 Javascript
JavaScript省市区三级联动菜单效果
Sep 21 Javascript
JQuery页面随滚动条动态加载效果的简单实现(推荐)
Feb 08 Javascript
原生js仿淘宝网商品放大镜效果
Feb 28 Javascript
JQuery 封装 Ajax 常用方法(推荐)
May 21 jQuery
JS库之Three.js 简易入门教程(详解之一)
Sep 13 Javascript
vue2.0 实现页面导航提示引导的方法
Mar 13 Javascript
解决LayUI表单获取不到data的问题
Aug 20 Javascript
js屏蔽F12审查元素,禁止修改页面代码等实现代码
Oct 02 Javascript
微信小程序自定义支持图片的弹窗
Dec 21 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/01/17 PHP
PHP include任意文件或URL介绍
2014/04/29 PHP
标准版Eclipse搭建PHP环境的详细步骤
2015/11/18 PHP
在openSUSE42.1下编译安装PHP7 的方法
2015/12/24 PHP
什么是PHP文件?如何打开PHP文件?
2017/06/27 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
2019/10/09 PHP
IE的fireEvent方法概述及应用
2013/02/22 Javascript
自己写的Javascript计算时间差函数
2013/10/28 Javascript
js中的replace方法使用介绍
2013/10/28 Javascript
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
jQuery焦点控制图层展示延迟隐藏的方法
2015/03/09 Javascript
jQuery+PHP实现动态数字展示特效
2015/03/14 Javascript
详解JavaScript中循环控制语句的用法
2015/06/03 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
原生JS实现-星级评分系统的简单实例
2016/08/21 Javascript
js数组操作方法总结(必看篇)
2016/11/22 Javascript
代码详解Vuejs响应式原理
2017/12/20 Javascript
详解使用Next.js构建服务端渲染应用
2018/07/10 Javascript
微信小程序单选radio及多选checkbox按钮用法示例
2019/04/30 Javascript
[29:23]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场1
2014/05/23 DOTA
python 多线程应用介绍
2012/12/19 Python
Python 统计字数的思路详解
2018/05/08 Python
django2.2安装错误最全的解决方案(小结)
2019/09/24 Python
Python 识别12306图片验证码物品的实现示例
2020/01/20 Python
python str字符串转uuid实例
2020/03/03 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
python传到前端的数据,双引号被转义的问题
2020/04/03 Python
python爬虫---requests库的用法详解
2020/09/28 Python
Swisse官方海外旗舰店:澳大利亚销量领先,自然健康品牌
2017/12/15 全球购物
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
FC-Moto美国:欧洲最大的摩托车服装和头盔商店之一
2019/08/24 全球购物
档案管理员岗位职责
2013/12/01 职场文书
标准自荐信范文
2014/01/29 职场文书
社团文化节策划书
2014/02/01 职场文书
无锡灵山大佛导游词
2015/02/09 职场文书
小学秋季运动会通讯稿
2015/11/25 职场文书