利用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 相关文章推荐
Jquery Autocomplete 结合asp.net使用要点
Oct 29 Javascript
js判断输入是否为数字的具体实例
Aug 03 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
Aug 08 Javascript
JavaScript及jquey实现多个数组的合并操作
Sep 06 Javascript
jQuery插件实现大图全屏图片相册
Mar 14 Javascript
jQuery插件Echarts实现的渐变色柱状图
Mar 23 jQuery
Bootstrap滚动监听组件scrollspy.js使用方法详解
Jul 20 Javascript
认识jQuery的Promise的具体使用方法
Oct 10 jQuery
jsonp跨域及实现百度首页联想功能的方法
Aug 30 Javascript
详解vue中使用protobuf踩坑记
May 07 Javascript
vue+element项目中过滤输入框特殊字符小结
Aug 07 Javascript
微信小程序中插入激励视频广告并获取收益(实例代码)
Dec 06 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
国内咖啡文化
2021/03/03 咖啡文化
php基础知识:类与对象(5) static
2006/12/13 PHP
初次接触php抽象工厂模式(Elgg)
2010/03/21 PHP
php长字符串定义方法
2012/07/12 PHP
PHP面向对象自动加载机制原理与用法分析
2016/10/14 PHP
用javascript实现无刷新更新数据的详细步骤 asp
2006/12/26 Javascript
关于javascript document.createDocumentFragment()
2009/04/04 Javascript
jquery获取div宽度的实现思路与代码
2013/01/13 Javascript
js/jquery解析json和数组格式的方法详解
2014/01/09 Javascript
input:checkbox多选框实现单选效果跟radio一样
2014/06/16 Javascript
js+canvas绘制五角星的方法
2016/01/28 Javascript
vue通过watch对input做字数限定的方法
2017/07/13 Javascript
vue-awesome-swiper滑块插件使用方法详解
2017/11/27 Javascript
vue计算属性computed的使用方法示例
2019/03/13 Javascript
详解关于html,css,js三者的加载顺序问题
2019/04/10 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
2019/05/22 Javascript
tweenjs缓动算法的使用实例分析
2019/08/26 Javascript
使用 Opentype.js 生成字体子集的实例代码详解
2020/05/25 Javascript
如何使用jQuery操作Cookies方法解析
2020/09/08 jQuery
[01:08:17]2018DOTA2亚洲邀请赛3月29日 小组赛B组 EG VS VGJ.T
2018/03/30 DOTA
[54:10]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
[48:28]完美世界DOTA2联赛循环赛FTD vs Magma第二场 10月30日
2020/10/31 DOTA
python实现查询IP地址所在地
2015/03/29 Python
Python变量赋值的秘密分享
2018/04/03 Python
Python中使用logging和traceback模块记录日志和跟踪异常
2019/04/09 Python
python 制作python包,封装成可用模块教程
2020/07/13 Python
HTML5 语音搜索只需一句代码
2013/01/03 HTML / CSS
英国领先的葡萄酒专家:Majestic Wine
2017/05/30 全球购物
旅游管理实习自我鉴定
2013/09/29 职场文书
银行员工职业规划范文
2014/01/21 职场文书
学校大课间活动方案
2014/01/30 职场文书
医德医风演讲稿
2014/05/20 职场文书
党的群众路线教育实践活动个人整改方案
2014/10/25 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
2016高三毕业赠言寄语
2015/12/04 职场文书
《观潮》教学反思
2016/02/17 职场文书