利用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 相关文章推荐
ExtJs中gridpanel分组后组名排序实例代码
Dec 02 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
Apr 23 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
Sep 03 Javascript
加载列表时jquery获取ul中第一个li的属性
Nov 02 Javascript
js实现从数组里随机获取元素
Jan 12 Javascript
JS获取图片高度宽度的方法分享
Apr 17 Javascript
javascript实现获取指定精度的上传文件的大小简单实例
Oct 25 Javascript
jquery validation验证表单插件
Jan 07 Javascript
ES6中的Promise代码详解
Oct 09 Javascript
JavaScript实现元素滚动条到达一定位置循环追加内容
Dec 28 Javascript
vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】
Aug 29 Javascript
layui实现tab的添加拒绝重复的方法
Sep 04 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/08/21 PHP
PHP设计模式之适配器模式原理与用法分析
2018/04/25 PHP
JS 树形递归实例代码
2010/05/18 Javascript
javascript/jquery获取地址栏url参数的方法
2014/03/05 Javascript
使用cluster 将自己的Node服务器扩展为多线程服务器
2014/11/10 Javascript
js实现点击链接后窗口缩小并居中的方法
2015/03/02 Javascript
angularJs关于指令的一些冷门属性详解
2016/10/24 Javascript
微信小程序 获取微信OpenId详解及实例代码
2016/10/31 Javascript
Bootstrap select实现下拉框多选效果
2016/12/23 Javascript
基于javascript实现数字英文验证码
2017/01/25 Javascript
打字效果动画的4种实现方法(超简单)
2017/10/18 Javascript
解决Idea、WebStorm下使用Vue cli脚手架项目无法使用Webpack别名的问题
2019/10/11 Javascript
解决vuex数据页面刷新后初始化操作
2020/07/26 Javascript
浅谈vue-props的default写不写有什么区别
2020/08/09 Javascript
Python使用urllib2获取网络资源实例讲解
2013/12/02 Python
Python用GET方法上传文件
2015/03/10 Python
深入源码解析Python中的对象与类型
2015/12/11 Python
深入讲解Java编程中类的生命周期
2016/02/05 Python
Python中set与frozenset方法和区别详解
2016/05/23 Python
django 按时间范围查询数据库实例代码
2018/02/11 Python
pandas.DataFrame选取/排除特定行的方法
2018/07/03 Python
python实现视频分帧效果
2019/05/31 Python
Python学习笔记之迭代器和生成器用法实例详解
2019/08/08 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
2020/08/07 Python
CSS3实战第一波 让我们尽情的圆角吧
2010/08/27 HTML / CSS
html5 css3实例教程 一款html5和css3实现的小机器人走路动画
2014/10/20 HTML / CSS
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
最常使用的求职信
2014/05/25 职场文书
供用电专业求职信
2014/07/07 职场文书
酒店总经理岗位职责范本
2014/08/08 职场文书
三峡人家导游词
2015/01/31 职场文书
教师节寄语2015
2015/03/23 职场文书
房产电话营销开场白
2015/05/29 职场文书
新生儿未入户证明
2015/06/23 职场文书
2016公司中秋节寄语
2015/12/07 职场文书
MySQL查看表和清空表的常用命令总结
2021/05/26 MySQL