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实现鼠标拖动图片效果示例代码
Jan 09 Javascript
浅谈javascript 函数内部属性
Jan 21 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
Mar 11 Javascript
checkbox批量选中,获取选中项的值的简单实例
Jun 28 Javascript
微信小程序商城项目之侧栏分类效果(1)
Apr 17 Javascript
jQuery EasyUI的TreeGrid查询功能实现方法
Aug 08 jQuery
vue项目环境变量配置的实现方法
Oct 12 Javascript
ng-zorro-antd 入门初体验
Dec 03 Javascript
JS/HTML5游戏常用算法之追踪算法实例详解
Dec 12 Javascript
es6函数中的作用域实例分析
Apr 18 Javascript
vue实现购物车案例
May 30 Javascript
解决vue net :ERR_CONNECTION_REFUSED报错问题
Aug 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 header功能的使用
2013/10/28 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
2015/10/19 PHP
python进程与线程小结实例分析
2018/11/11 PHP
让iframe框架网页在任何浏览器下自动伸缩
2006/08/18 Javascript
静态的动态续篇之来点XML
2006/12/23 Javascript
jquery ajax修改全局变量示例代码
2013/11/08 Javascript
jquery悬浮提示框完整实例
2016/01/13 Javascript
JavaScript数组操作详解
2017/02/04 Javascript
利用js的闭包原理做对象封装及调用方法
2017/04/07 Javascript
angular2 ng2 @input和@output理解及示例
2017/10/10 Javascript
node结合swig渲染摸板的方法
2018/04/11 Javascript
浅析node.js的模块加载机制
2018/05/25 Javascript
深入了解JavaScript 的 WebAssembly
2019/06/15 Javascript
解决layui富文本编辑器图片上传无法回显的问题
2019/09/18 Javascript
利用JS如何获取form表单数据
2019/12/19 Javascript
js Math数学简单使用操作示例
2020/03/13 Javascript
vue内置组件keep-alive事件动态缓存实例
2020/10/30 Javascript
[03:17]2014DOTA2 国际邀请赛中国区预选赛 四强专访
2014/05/23 DOTA
Python数据结构之Array用法实例
2014/10/09 Python
Python编程中对文件和存储器的读写示例
2016/01/25 Python
python利用smtplib实现QQ邮箱发送邮件
2020/05/20 Python
Pytorch自己加载单通道图片用作数据集训练的实例
2020/01/18 Python
Python连接SQLite数据库并进行增册改查操作方法详解
2020/02/18 Python
Python面向对象多态实现原理及代码实例
2020/09/16 Python
可持续木材、生态和铝制太阳镜:Proof Eyewear
2019/07/24 全球购物
个人求职简历的自我评价范文
2013/10/09 职场文书
播音主持女孩的自我评价分享
2013/11/20 职场文书
应届毕业生应聘自荐信范文
2014/02/26 职场文书
幼儿园的门卫岗位职责
2014/04/10 职场文书
卖车协议书
2014/04/21 职场文书
软件项目开发计划书
2014/05/01 职场文书
学习十八届四中全会依法治国心得体会
2014/11/03 职场文书
食品仓管员岗位职责
2015/04/01 职场文书
公司停电通知
2015/04/15 职场文书
2019感恩宣传标语!
2019/07/05 职场文书
解决Golang中goroutine执行速度的问题
2021/05/02 Golang