利用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中面向对象技术的模拟
Sep 25 Javascript
js读取本地excel文档数据的代码
Nov 11 Javascript
javascript框架设计读书笔记之数组的扩展与修复
Dec 02 Javascript
js实现两点之间画线的方法
May 12 Javascript
关于JavaScript的变量的数据类型的判断方法
Aug 14 Javascript
Node.js的MongoDB驱动Mongoose基本使用教程
Mar 01 Javascript
利用node.js写一个爬取知乎妹纸图的小爬虫
May 03 Javascript
微信小程序页面生命周期详解
Jan 31 Javascript
JS获取浏览器地址栏的多个参数值的任意值实例代码
Jul 24 Javascript
微信小程序websocket实现即时聊天功能
May 21 Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
Dec 09 Javascript
Vue3如何理解ref toRef和toRefs的区别
Feb 18 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
同一空间绑定多个域名而实现访问不同页面的PHP代码
2006/12/06 PHP
需要发散思维学习PHP
2009/06/29 PHP
PHP中的多行字符串传递给JavaScript的两种方法
2014/06/19 PHP
php判断用户是否关注微信公众号
2016/07/22 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
2018/10/23 PHP
PHP实现简易图形计算器
2020/08/28 PHP
JS 统计时间
2021/03/09 Javascript
javascript弹出页面回传值的方法
2015/01/28 Javascript
js实现格式化金额,字符,时间的方法
2015/02/26 Javascript
JavaScript中的条件判断语句使用详解
2015/06/03 Javascript
javascript自定义in_array()函数实现方法
2015/08/03 Javascript
Bootstrap学习笔记之css样式设计(1)
2016/06/07 Javascript
vue双向数据绑定原理探究(附demo)
2017/01/17 Javascript
简单实现js轮播图效果
2017/07/14 Javascript
Angular实现下载安装包的功能代码分享
2017/09/05 Javascript
JS库之wow.js使用方法
2017/09/14 Javascript
微信小程序实现列表下拉刷新上拉加载
2020/07/29 Javascript
vue 子组件向父组件传值方法
2018/02/26 Javascript
分析javascript原型及原型链
2018/03/18 Javascript
Vue实现固定定位图标滑动隐藏效果
2019/05/30 Javascript
vue elementUI 表单校验功能之数组多层嵌套
2019/06/04 Javascript
tweenjs缓动算法的使用实例分析
2019/08/26 Javascript
vue a标签点击实现赋值方式
2020/09/07 Javascript
python使用jieba实现中文分词去停用词方法示例
2018/03/11 Python
python 实现分页显示从es中获取的数据方法
2018/12/26 Python
python找出一个列表中相同元素的多个索引实例
2019/06/11 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
2020/02/28 Python
python下对hsv颜色空间进行量化操作
2020/06/04 Python
HTML5实现动画效果的方式汇总
2016/02/29 HTML / CSS
美国真皮手袋品牌:GiGi New York
2017/03/10 全球购物
印度尼西亚电子产品购物网站:Kliknklik
2018/06/05 全球购物
大学生学期个人总结
2015/02/12 职场文书
岁月神偷观后感
2015/06/11 职场文书
红色革命电影观后感
2015/06/18 职场文书
2016秋季运动会前导词
2015/11/25 职场文书
MySQL数据库实验实现简单数据库应用系统设计
2022/06/21 MySQL