JavaScipt中栈的实现方法
2016-02-17 00:00
357 查看
接下来就是数据结构的第一部分,栈。
栈是一种遵从后进先出原则(LIFO,全称为Last In First Out)的有序集合。栈顶永远是最新的元素。
举个例子就是:栈就像放在箱子里的一叠书 你要拿下面的书先要把上面的书拿开。(当然,你不能先拿下面的书)
看图示也可明白。
JavaScipt中栈的实现
首先,创建一个构造函数。
栈需要有如下的方法:
push(element(s)): 添加几个元素到栈顶
pop(): 移除并返回栈顶元素
peek(): 返回栈顶元素
isAmpty: 检查栈是否为空,为空则返回true
clear: 移除栈中所有元素
size: 返回栈中元素个数。
print: 以字符串显示栈中所有内容
push方法的实现
说明: 需要往栈中添加新元素,元素位置在队列的末尾。也就是说,我们可以用数组的push方法来模拟实现。
实现:
pop方法的实现
说明: 需要把栈顶元素弹出,同时返回被弹出的值。可以用数组的pop方法来模拟实现。
实现:
peek方法的实现
说明: 查看栈顶元素,可以用数组长度来实现。
实现:
其余方法的实现
说明: 前三个是栈方法的核心,其余方法则在此一次性列出。因为下文要讲的队列,会与这部分有很大重合。
实现:
实际应用
栈的实际应用比较多,书中有个十进制转二进制的函数。(不懂二进制怎么算的话可以百度)下面是函数的源代码。
原理就是输入要转换的数字,不断的除以二并取整。并且最后运用while循环,将栈中所有数字拼接成字符串输出。
到此而言,栈的学习就告一段落了,希望对大家学习javascript中栈的实现方法有所帮助。
输出java进程的jstack信息示例分享 通过线程堆栈信息分析java线程
js使用栈来实现10进制转8进制与取除数及余数
基于NodeJS的前后端分离的思考与实践(一)全栈式开发
基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
Nodejs全栈框架StrongLoop推荐
最流行的Node.js精简型和全栈型开发框架介绍
JavaScript把数组作为堆栈使用的方法
JavaScript中数据结构与算法(一):栈
栈是一种遵从后进先出原则(LIFO,全称为Last In First Out)的有序集合。栈顶永远是最新的元素。
举个例子就是:栈就像放在箱子里的一叠书 你要拿下面的书先要把上面的书拿开。(当然,你不能先拿下面的书)
看图示也可明白。
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调用堆栈及setTimeout使用方法深入剖析输出java进程的jstack信息示例分享 通过线程堆栈信息分析java线程
js使用栈来实现10进制转8进制与取除数及余数
基于NodeJS的前后端分离的思考与实践(一)全栈式开发
基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
Nodejs全栈框架StrongLoop推荐
最流行的Node.js精简型和全栈型开发框架介绍
JavaScript把数组作为堆栈使用的方法
JavaScript中数据结构与算法(一):栈
相关文章推荐
- javaweb学习总结(四十七)——监听器(Listener)在开发中的应用
- 使用Maven搭建Struts2框架的开发环境
- MyEclipse10搭建Strust2开发环境
- javaweb学习总结(二十七)——jsp简单标签开发案例和打包
- JavaWeb学习总结(十二)——Session
- java基础学习总结——static关键字
- java基础学习总结——多态(动态绑定)
- JavaWeb学习总结(五十)——文件上传和下载
- MyEclipse使用总结——使用MyEclipse打包带源码的jar包
- MyEclipse使用总结——设置MyEclipse开发项目时使用的JDK
- java基础学习总结——对象转型
- MyEclipse使用总结——MyEclipse去除网上复制下来的来代码带有的行号
- java基础学习总结——equals方法
- javaweb学习总结(三十一)——国际化(i18n)
- java基础学习总结——开篇
- java基础学习总结——super关键字
- Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结
- JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet
- JAVA 判断一个字符串是不是一个合法的日期格式
- Java基础学习总结——Java对象的序列化和反序列化