利用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 相关文章推荐
Javascript 复制数组实现代码
Nov 26 Javascript
javascript的数据类型、字面量、变量介绍
May 23 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
May 13 Javascript
基于jQuery实现表单提交验证
Nov 24 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
Apr 14 Javascript
解析jQueryEasyUI的使用
Nov 22 Javascript
Jquery Easyui选项卡组件Tab使用详解(10)
Dec 18 Javascript
Vue学习之路之登录注册实例代码
Jul 06 Javascript
在node中使用jwt签发与验证token的方法
Apr 03 Javascript
JavaScript的查询机制LHS和RHS解析
Aug 16 Javascript
JS倒计时两种实现方式代码实例
Jul 27 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
Dec 11 Vue.js
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
从C/C++迁移到PHP——判断字符类型的函数
2006/10/09 PHP
PHP gbk环境下json_dencode传送来的汉字
2012/11/13 PHP
jQuery Mobile + PHP实现文件上传
2014/12/12 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
基于PHP实现用户登录注册功能的详细教程
2020/08/04 PHP
js中的前绑定和后绑定详解
2013/08/01 Javascript
js 事件截取enter按键页面提交事件示例代码
2014/03/04 Javascript
微信企业号开发之微信考勤Cookies的使用
2015/09/11 Javascript
不能不知道的10个angularjs英文学习网站
2016/03/23 Javascript
jQuery密码强度验证控件使用详解
2017/01/05 Javascript
微信小程序实现实时圆形进度条的方法示例
2017/02/24 Javascript
详解webpack es6 to es5支持配置
2017/05/04 Javascript
vue 组件使用中的一些细节点
2018/04/25 Javascript
JavaScript隐式类型转换代码实例
2020/05/29 Javascript
基于JavaScript实现简单扫雷游戏
2021/01/02 Javascript
对于Python中线程问题的简单讲解
2015/04/03 Python
Python程序中用csv模块来操作csv文件的基本使用教程
2016/03/03 Python
简单谈谈python中的Queue与多进程
2016/08/25 Python
Python实现的选择排序算法原理与用法实例分析
2017/11/22 Python
详解django+django-celery+celery的整合实战
2019/03/19 Python
Pytorch实现GoogLeNet的方法
2019/08/18 Python
Python学习笔记之字符串和字符串方法实例详解
2019/08/22 Python
python matplotlib 画dataframe的时间序列图实例
2019/11/20 Python
节日快乐! Python画一棵圣诞树送给你
2019/12/24 Python
你需要学会的8个Python列表技巧
2020/06/24 Python
html5 利用canvas实现超级玛丽简单动画
2013/09/06 HTML / CSS
Onzie官网:美国时尚瑜伽品牌
2019/08/21 全球购物
世界上最大的皮肤科医生拥有和经营的美容网站:LovelySkin
2021/01/03 全球购物
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
小学生自我鉴定
2013/10/12 职场文书
火锅店创业计划书范文
2014/02/02 职场文书
党的群众路线教育实践活动个人批评与自我批评
2014/10/16 职场文书
党员学习群众路线心得体会
2014/11/04 职场文书
优秀共产党员推荐材料
2014/12/18 职场文书
产品质量保证书范本
2015/02/27 职场文书
2015年征兵工作总结
2015/07/23 职场文书