利用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中的有名函数和无名函数
Oct 17 Javascript
12个非常有创意的JavaScript小游戏
Mar 18 Javascript
对jQuery的事件绑定的一些思考(补充)
Apr 20 Javascript
Jquery实现列表(隔行换色,全选,鼠标滑过当前行)效果实例
Jun 09 Javascript
js原生appendChild的bug解决心得分享
Jul 01 Javascript
JS作用域深度解析
Dec 29 Javascript
微信小程序 详解Page中data数据操作和函数调用
Jan 12 Javascript
使用node.js对音视频文件加密的实例代码
Aug 30 Javascript
layui的table中显示图片方法
Aug 17 Javascript
jquery登录的异步验证操作示例
May 09 jQuery
微信小程序 数据缓存实现方法详解
Aug 26 Javascript
React forwardRef的使用方法及注意点
Jun 13 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
回答PHPCHINA上的几个问题:URL映射
2007/02/14 PHP
Admin generator, filters and I18n
2011/10/06 PHP
php猜单词游戏
2015/09/29 PHP
运用jquery实现table单双行不同显示并能单行选中
2009/07/25 Javascript
javascript 循环读取JSON数据的代码
2010/07/17 Javascript
js jquery验证银行卡号信息正则学习
2013/01/21 Javascript
Js制作简单弹出层DIV在页面居中 中间显示遮罩的具体方法
2013/08/08 Javascript
用JS实现3D球状标签云示例代码
2013/12/01 Javascript
js和jquery中循环的退出和继续下一个循环
2014/09/03 Javascript
jQuery中dequeue()方法用法实例
2014/12/29 Javascript
JQuery中绑定事件(bind())和移除事件(unbind())
2015/02/27 Javascript
jQuery控制网页打印指定区域的方法
2015/04/07 Javascript
浅析Node.js中的内存泄漏问题
2015/06/23 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
2015/08/24 Javascript
设置jquery UI 控件的大小方法
2016/12/12 Javascript
微信小程序 HTTPS报错整理常见问题及解决方案
2016/12/14 Javascript
nodejs爬虫初试superagent和cheerio
2018/03/05 NodeJs
微信小程序block的使用教程
2018/04/01 Javascript
深入理解基于vue-cli的webpack打包优化实践及探索
2019/10/14 Javascript
浅析我对JS延迟异步脚本的思考
2020/10/12 Javascript
python中enumerate的用法实例解析
2014/08/18 Python
Python中实现对list做减法操作介绍
2015/01/09 Python
解析Python中的eval()、exec()及其相关函数
2017/12/20 Python
python中验证码连通域分割的方法详解
2018/06/04 Python
Python进阶之使用selenium爬取淘宝商品信息功能示例
2019/09/16 Python
python 实现让字典的value 成为列表
2019/12/16 Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
2020/01/03 Python
浅谈Python访问MySQL的正确姿势
2020/01/07 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
2021/01/27 Python
Engel & Bengel官网:婴儿推车、儿童房家具和婴儿设备
2019/12/28 全球购物
波兰汽车配件网上商店:iParts.pl
2020/09/08 全球购物
程序员经常用到的UNIX命令
2015/04/13 面试题
同学聚会主持词
2014/03/18 职场文书
个人银行贷款担保书
2014/04/01 职场文书
预防艾滋病宣传标语
2014/06/25 职场文书
关于环保的宣传稿
2015/07/23 职场文书