利用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 相关文章推荐
基于jQuery的动态表格插件
Mar 28 Javascript
利用javascript实现全部删或清空所选的操作
May 27 Javascript
jQuery的图片滑块焦点图插件整理推荐
Dec 07 Javascript
jQuery实现首页图片淡入淡出效果的方法
Jun 10 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
Feb 01 Javascript
jquery ajax结合thinkphp的getjson实现跨域的方法
Jun 06 Javascript
基于JQuery实现的跑马灯效果(文字无缝向上翻动)
Dec 02 Javascript
深入了解JavaScript的逻辑运算符(与、或)
Dec 20 Javascript
如何使用bootstrap框架 bootstrap入门必看!
Apr 13 Javascript
vue路由事件beforeRouteLeave及组件内定时器的清除方法
Sep 29 Javascript
微信小程序仿今日头条导航栏滚动解析
Aug 20 Javascript
基于javascript的无缝滚动动画1
Aug 07 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
神族 Protoss 历史背景
2020/03/14 星际争霸
PHP限制页面只能在微信自带浏览器访问的代码
2014/01/15 PHP
详解thinkphp中的volist标签
2018/01/15 PHP
详解阿里云视频直播PHP-SDK接入教程
2020/07/09 PHP
JavaScript学习点滴 call、apply的区别
2010/10/22 Javascript
JavaScript加强之自定义callback示例
2013/09/21 Javascript
实例讲解JavaScript中instanceof运算符的用法
2016/06/08 Javascript
JavaScript实现输入框与清空按钮联动效果
2016/09/09 Javascript
使用requirejs模块化开发多页面一个入口js的使用方式
2017/06/14 Javascript
Vue学习笔记进阶篇之函数化组件解析
2017/07/21 Javascript
JS实现登录页密码的显示和隐藏功能
2017/12/06 Javascript
利用SpringMVC过滤器解决vue跨域请求的问题
2018/02/10 Javascript
Vue动态组件和异步组件原理详解
2019/05/06 Javascript
Js视频播放器插件Video.js使用方法详解
2020/02/04 Javascript
使用matplotlib画散点图的方法
2018/05/25 Python
Python基于多线程操作数据库相关问题分析
2018/07/11 Python
一文带你了解Python中的字符串是什么
2018/11/20 Python
Python3 中作为一等对象的函数解析
2019/12/11 Python
python标准库OS模块详解
2020/03/10 Python
基于Django OneToOneField和ForeignKey的区别详解
2020/03/30 Python
在PyTorch中使用标签平滑正则化的问题
2020/04/03 Python
python删除某个目录文件夹的方法
2020/05/26 Python
基于python实现生成指定大小txt文档
2020/07/20 Python
Java爬虫技术框架之Heritrix框架详解
2020/07/22 Python
Python爬虫之Selenium实现窗口截图
2020/12/04 Python
婴儿鞋,独特的婴儿服装和配件:Zutano
2018/11/03 全球购物
工程造价自荐信
2013/10/09 职场文书
运动会广播稿300字
2014/01/10 职场文书
如何撰写岗位职责
2014/02/01 职场文书
司机检讨书
2014/02/13 职场文书
我的梦想演讲稿1000字
2014/08/21 职场文书
县政府办公室领导班子个人对照检查材料
2014/09/16 职场文书
大学军训的体会
2014/11/08 职场文书
民政局未婚证明
2015/06/15 职场文书
简单聊聊TypeScript只读修饰符
2022/04/06 Javascript
windows server 2016 域环境搭建的方法步骤(图文)
2022/06/25 Servers