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 相关文章推荐
silverlight线程与基于事件驱动javascript引擎(实现轨迹回放功能)
Aug 09 Javascript
JavaScript中的eval()函数使用介绍
Dec 31 Javascript
javascript通过获取html标签属性class实现多选项卡的方法
Jul 27 Javascript
ES6记录异步函数的执行时间详解
Aug 31 Javascript
详解Node.Js如何处理post数据
Sep 19 Javascript
使用BootStrap进行轮播图的制作
Jan 06 Javascript
微信小程序中form 表单提交和取值实例详解
Apr 20 Javascript
JavaScript中附件预览功能实现详解(推荐)
Aug 15 Javascript
微信小程序中setInterval的使用方法
Sep 29 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
Oct 27 Javascript
vue实现键盘输入支付密码功能
Aug 18 Javascript
面试中canvas绘制图片模糊图片问题处理
Mar 13 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 Cookie的使用教程详解
2013/06/03 PHP
两千行代码的PHP学习笔记汇总
2014/10/05 PHP
php数组随机排序实现方法
2015/06/13 PHP
使用phpstorm和xdebug实现远程调试的方法
2015/12/29 PHP
PHP接口继承及接口多继承原理与实现方法详解
2017/10/18 PHP
javascript void(0)的妙用
2009/10/21 Javascript
用JS写的一个TableView控件代码
2010/01/23 Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
2011/10/23 Javascript
基于jquery的9行js轻松实现tab控件示例
2013/10/12 Javascript
JavaScript验证电子邮箱的函数
2014/08/22 Javascript
JavaScript strike方法入门实例(给字符串加上删除线)
2014/10/17 Javascript
JavaScript中的包装对象介绍
2015/01/27 Javascript
JS实现定时自动关闭DIV层提示框的方法
2015/05/11 Javascript
angular route中使用resolve在uglify压缩后问题解决
2016/09/21 Javascript
JS中mouseup事件丢失的原因与解决办法
2017/06/14 Javascript
详解用webpack2搭建angular2的项目
2017/06/22 Javascript
详解webpack的配置文件entry与output
2017/08/21 Javascript
vue路由跳转时判断用户是否登录功能的实现
2017/10/26 Javascript
vue App.vue中的公共组件改变值触发其他组件或.vue页面监听
2019/05/31 Javascript
Element InfiniteScroll无限滚动的具体使用方法
2020/07/27 Javascript
使用Python的web.py框架实现类似Django的ORM查询的教程
2015/05/02 Python
Python的Django框架中自定义模版标签的示例
2015/07/20 Python
Python入门学习之字符串与比较运算符
2015/10/12 Python
Python实现单词翻译功能
2017/06/06 Python
python unittest实现api自动化测试
2018/04/04 Python
详解Python使用Plotly绘图工具,绘制甘特图
2019/04/02 Python
Python 2/3下处理cjk编码的zip文件的方法
2019/04/26 Python
python 公共方法汇总解析
2019/09/16 Python
CSS3 @keyframes简单动画实现
2018/02/24 HTML / CSS
HTML5通用接口详解
2016/06/12 HTML / CSS
ONLY德国官方在线商店:购买时尚女装
2017/09/21 全球购物
丝芙兰新加坡官网:Sephora新加坡
2018/12/04 全球购物
Michael Kors加拿大官网:购买设计师手袋、手表、鞋子、服装等
2019/03/16 全球购物
Visual-Click葡萄牙:欧洲领先的在线眼镜商
2020/02/17 全球购物
社区服务标语
2014/07/01 职场文书
2014年公务员工作总结
2014/11/18 职场文书