利用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 相关文章推荐
XHTML-Strict 内允许出现的标签
Dec 11 Javascript
js 发个判断字符串是否为符合标准的函数
Apr 27 Javascript
各种常用浏览器getBoundingClientRect的解析
May 21 Javascript
TextArea不支持maxlength的解决办法(jquery)
Sep 13 Javascript
从QQ网站中提取的纯JS省市区三级联动菜单
Dec 25 Javascript
js判断浏览器类型为ie6时不执行
Jun 15 Javascript
js中的事件捕捉模型与冒泡模型实例分析
Jan 10 Javascript
jQuery中Ajax的load方法详解
Jan 14 Javascript
基于javascript实现彩票随机数生成(升级版)
Apr 17 Javascript
图解Javascript——作用域、作用域链、闭包
Mar 21 Javascript
浅谈通过JS拦截 pushState和replaceState事件
Jul 21 Javascript
JavaScript面向对象精要(下部)
Sep 12 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
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
利用php做服务器和web前端的界面进行交互
2016/10/31 PHP
JavaScript Title、alt提示(Tips)实现源码解读
2010/12/12 Javascript
jQuery选择器源码解读(八):addCombinator函数
2015/03/31 Javascript
浅析Javascript ES6新增值比较函数Object.is
2016/08/24 Javascript
AngularJS通过$http和服务器通信详解
2016/09/21 Javascript
JS/jQuery判断DOM节点是否存在的简单方法
2016/11/24 Javascript
详解百度百科目录导航树小插件
2017/01/08 Javascript
详解在Angular项目中添加插件ng-bootstrap
2017/07/04 Javascript
nodejs socket服务端和客户端简单通信功能
2017/09/14 NodeJs
浅谈React Event实现原理
2018/09/20 Javascript
js Array.slice的8种不同用法示例
2019/07/10 Javascript
JS 数组基本用法入门示例解析
2020/01/16 Javascript
基于VSCode调试网页JavaScript代码过程详解
2020/07/20 Javascript
python自动化测试之setUp与tearDown实例
2014/09/28 Python
Python中的XML库4Suite Server的介绍
2015/04/14 Python
Python中datetime模块参考手册
2017/01/13 Python
使用C++扩展Python的功能详解
2018/01/12 Python
Django 大文件下载实现过程解析
2019/08/01 Python
Python学习笔记之错误和异常及访问错误消息详解
2019/08/08 Python
python实现提取str字符串/json中多级目录下的某个值
2020/02/27 Python
Python getattr()函数使用方法代码实例
2020/08/10 Python
深入解析HTML5 Canvas控制图形矩阵变换的方法
2016/03/24 HTML / CSS
美国知名户外用品畅销中心:Sierra Trading Post
2016/07/19 全球购物
意大利在线药房:Farmacia Loreto Gallo
2019/08/09 全球购物
在线实验室测试:HealthLabs.com
2020/05/03 全球购物
璀璨的珍珠、密钉和个性化珠宝:Lily & Roo
2021/01/21 全球购物
高中生的自我鉴定范文
2014/01/24 职场文书
个人简历中的自我评价怎么写
2014/01/26 职场文书
12月小学生校园广播稿
2014/02/04 职场文书
作文评语大全
2014/04/23 职场文书
我有一个梦想演讲稿
2014/05/05 职场文书
奠基仪式策划方案
2014/05/15 职场文书
2015年公司新年寄语
2014/12/08 职场文书
校园之声广播稿
2015/08/18 职场文书
详解TypeScript的基础类型
2022/02/18 Javascript