利用JavaScript实现栈的数据结构示例代码


Posted in Javascript onAugust 02, 2017

前言

本文主要给大家介绍的是关于JavaScript实现栈的数据结构的相关内容,分享出来供大家参考学习,话不多少,来一起看看详细的介绍:

堆栈(英语:stack),也可直接称栈,在计算机科学中,是一种特殊的串列形式的数据结构,它的特殊之处在于只能允许在链接串列或阵列的一端(称为堆叠顶端指标,英语:top)进行加入数据(push)和输出数据(pop)的运算。另外栈也可以用一维数组或连结串列的形式来完成。 

由于堆叠数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In First Out)的原理运作。 ? 维基百科

上面是维基百科对栈的解读。下面我们用JavaScript(ES6)代码对栈的数据结构进行实现

实现一个Stack类

/**
* Stack 类
*/
class Stack {
 constructor() {
 this.data = []; // 对数据初始化
 this.top = 0; // 初始化栈顶位置
 }

 // 入栈方法
 push() {
 const args = [...arguments];
 args.forEach(arg => this.data[this.top++] = arg);
 return this.top;
 }

 // 出栈方法
 pop() {
 if (this.top === 0) throw new Error('The stack is already empty!');
 const peek = this.data[--this.top];
 this.data = this.data.slice(0, -1);
 return peek;
 }

 // 返回栈顶元素
 peek() {
 return this.data[this.top - 1];
 }

 // 返回栈内元素个数
 length() {
 return this.top;
 }

 // 清除栈内所有元素
 clear() {
 this.top = 0;
 return this.data = [];
 }

 // 判断栈是否为空
 isEmpty() {
 return this.top === 0;
 }
}

// 实例化
const stack = new Stack();

stack.push(1);
stack.push(2, 3);
console.log(stack.data); // [1, 2, 3]
console.log(stack.peek()); // 3
console.log(stack.pop()); // 3, now data is [1, 2]
stack.push(3);
console.log(stack.length()); // 3
stack.clear(); // now data is []

用栈的思想将数字转换为二进制和八进制

/**
 * 将数字转换为二进制和八进制
 */
const numConvert = (num, base) => {
 const stack = new Stack();
 let converted = '';

 while(num > 0) {
 stack.push(num % base);
 num = Math.floor(num / base);
 }

 while(stack.length() > 0) {
 converted += stack.pop(); 
 }

 return +converted;
}

console.log(numConvert(10, 2)); // 1010

用栈的思想判断给定字符串或者数字是否是回文

/**
 * 判断给定字符串或者数字是否是回文
 */
const isPalindrome = words => {
 const stack = new Stack();
 let wordsCopy = '';
 words = words.toString();

 Array.prototype.forEach.call(words, word => stack.push(word));

 while(stack.length() > 0) {
 wordsCopy += stack.pop();
 }

 return words === wordsCopy;
}

console.log(isPalindrome('1a121a1')); // true
console.log(isPalindrome(2121)); // false

上面就是用JavaScript对栈的数据结构的实现,有些算法可能欠妥,但是仅仅是为了演示JS对栈的实现?

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
网站上面有这种切换效果
Jun 26 Javascript
COM中获取JavaScript数组大小的代码
Nov 22 Javascript
清空上传控件input file的值
Jul 03 Javascript
读jQuery之三(构建选择器)
Jun 11 Javascript
基于JavaScript 类的使用详解
May 07 Javascript
js实现键盘操作实现div的移动或改变的原理及代码
Jun 23 Javascript
jQuery页面加载初始化的3种方法(推荐)
Jun 02 Javascript
AngularJS包括详解及示例代码
Aug 17 Javascript
JavaScript仿微博输入框效果(案例分析)
Dec 06 Javascript
bootstrap3使用bootstrap datetimepicker日期插件
May 24 Javascript
vue小图标favicon不显示的解决方案
Sep 19 Javascript
node实现socket链接与GPRS进行通信的方法
May 20 Javascript
easyui-datagrid开发实践(总结)
Aug 02 #Javascript
js如何编写简单的ajax方法库
Aug 02 #Javascript
JavaScript实现无刷新上传预览图片功能
Aug 02 #Javascript
基于jquery实现多选下拉列表
Aug 02 #jQuery
基于LayUI分页和LayUI laypage分页的使用示例
Aug 02 #Javascript
使用JavaScript实现链表的数据结构的代码
Aug 02 #Javascript
javascript 取小数点后几位几种方法总结
Aug 02 #Javascript
You might like
PHP程序员必须清楚的问题汇总
2014/12/18 PHP
PHP中类的自动加载的方法
2017/03/17 PHP
PHP实现的简单路由和类自动加载功能
2018/03/13 PHP
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
js实现无需数据库的县级以上联动行政区域下拉控件
2013/08/14 Javascript
jquery将一个表单序列化为一个对象的方法
2013/12/02 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
jQuery 处理页面的事件详解
2015/01/20 Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
2015/07/29 Javascript
浅谈javascript中的constructor
2016/06/08 Javascript
浅析JavaScript中var that=this
2017/02/17 Javascript
详解vue.js2.0父组件点击触发子组件方法
2017/05/10 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
jquery根据name取得select选中的值实例(超简单)
2018/01/25 jQuery
vue.js2.0点击获取自己的属性和jquery方法
2018/02/23 jQuery
vue项目中公用footer组件底部位置的适配问题
2018/05/10 Javascript
微信小程序仿今日头条导航栏滚动解析
2019/08/20 Javascript
js实现GIF图片的分解和合成
2019/10/24 Javascript
分享JS表单验证源码(带错误提示及密码等级)
2020/01/05 Javascript
[47:35]VP vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
九步学会Python装饰器
2015/05/09 Python
整理Python 常用string函数(收藏)
2016/05/30 Python
Python 提取dict转换为xml/json/table并输出的实现代码
2016/08/28 Python
python实现的MySQL增删改查操作实例小结
2018/12/19 Python
python random从集合中随机选择元素的方法
2019/01/23 Python
10 分钟快速入门 Python3的教程
2019/01/29 Python
python与pycharm有何区别
2020/07/01 Python
Scrapy实现模拟登录的示例代码
2021/02/21 Python
一款纯css3实现的动画加载导航
2014/10/08 HTML / CSS
CSS3毛玻璃效果(blur)有白边问题的解决方法
2016/11/15 HTML / CSS
美国球鞋寄卖网站:Stadium Goods
2018/05/09 全球购物
介绍一下EJB的体系结构
2012/08/01 面试题
校庆活动策划方案
2014/06/05 职场文书
单位推荐信范文
2015/03/27 职场文书
有关西游记的读书笔记
2015/06/25 职场文书
医生行业员工的辞职信
2019/06/24 职场文书