利用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 相关文章推荐
用js实现手把手教你月入万刀(转贴)
Nov 07 Javascript
JS event使用方法详解
Apr 28 Javascript
javascript 计算两个整数的百分比值
Dec 26 Javascript
js function使用心得
May 10 Javascript
jQuery 处理页面的事件详解
Jan 20 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
May 09 Javascript
基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
Aug 29 Javascript
Bootstrap在线电子商务网站实战项目5
Oct 14 Javascript
JS设计模式之数据访问对象模式的实例讲解
Sep 30 Javascript
微信小程序实现YDUI的ScrollTab组件
Feb 02 Javascript
微信小程序如何刷新当前界面的实现方法
Jun 07 Javascript
Vue使用axios引起的后台session不同操作
Aug 14 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下检测字符串是否是utf8编码的代码
2008/06/28 PHP
比较discuz和ecshop的截取字符串函数php版
2012/09/03 PHP
PHP header()函数常用方法总结
2014/04/11 PHP
Swoole-1.7.22 版本已发布,修复PHP7相关问题
2015/12/31 PHP
PHP单链表的实现代码
2016/07/05 PHP
PHP中ajax无刷新上传图片与图片下载功能
2017/02/21 PHP
用Javascript实现UTF8编码转换成gb2312编码
2006/12/22 Javascript
JS支持带x身份证号码验证函数
2008/08/10 Javascript
用jquery模仿的a的title属性(兼容ie6/7)
2013/01/21 Javascript
jQuery响应鼠标事件并隐藏与显示input默认值
2014/08/24 Javascript
JavaScript中eval()函数用法详解
2015/12/14 Javascript
JS简单随机数生成方法
2016/09/05 Javascript
PHP抓取HTTPS内容和错误处理的方法
2016/09/30 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
2017/06/01 jQuery
微信小程序 地图map实例详解
2017/06/07 Javascript
ExtJs的Ext.Ajax.request实现waitMsg等待提示效果
2017/06/14 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
2018/09/27 Javascript
iview同时验证多个表单问题总结
2018/09/29 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
2020/02/20 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
2020/11/06 Javascript
Python中获取对象信息的方法
2015/04/27 Python
python实现二叉查找树实例代码
2018/02/08 Python
CSS实现限制字数功能当对象内文本溢出时显示省略标记
2014/08/20 HTML / CSS
澳大利亚在线生活方式商店:Mytopia
2018/07/08 全球购物
SNIDEL官网:日本VIVI杂志人气少女第一品牌
2020/03/12 全球购物
北京RT科技有限公司.net工程师面试题
2013/02/15 面试题
毕业生求职简历的自我评价
2013/10/07 职场文书
幼儿园小班教学反思
2014/02/02 职场文书
活动策划邀请函
2014/02/06 职场文书
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
初中英语课后反思
2014/04/25 职场文书
建设工程授权委托书
2014/09/22 职场文书
校长四风对照检查材料
2014/09/27 职场文书
优秀党员推荐材料
2014/12/18 职场文书
煤矿安全生产管理协议书
2016/03/22 职场文书
《狼王梦》读后感:可怜天下父母心
2019/11/01 职场文书