利用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 内存回收机制理解
Jan 17 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
Oct 16 Javascript
js hover 定时器(实例代码)
Nov 12 Javascript
js清理Word格式示例代码
Feb 13 Javascript
js实现新浪微博首页效果
Oct 16 Javascript
jQuery插件支持同一页面被多次调用
Feb 14 Javascript
AngularJS中控制器函数的定义与使用方法示例
Oct 10 Javascript
Electron vue的使用教程图文详解
Jul 05 Javascript
vue 使用axios 数据请求第三方插件的使用教程详解
Jul 05 Javascript
Vue 权限控制的两种方法(路由验证)
Aug 16 Javascript
js获取本日、本周、本月的时间代码
Feb 01 Javascript
javascript条件式访问属性和箭头函数介绍
Nov 17 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里的JS打印函数
2006/10/09 PHP
php循环输出数据库内容的代码
2008/05/24 PHP
ExtJS与PHP、MySQL实现存储的方法
2010/04/02 PHP
PHP 多维数组排序(usort,uasort)
2010/06/30 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
2014/06/04 PHP
php通过array_merge()函数合并两个数组的方法
2015/03/18 PHP
php实现文本数据导入SQL SERVER
2015/05/17 PHP
详解PHP中的null合并运算符
2015/12/30 PHP
PHP封装的非对称加密RSA算法示例
2018/05/28 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
浅谈Javascript 执行顺序
2013/12/18 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
jquery实用技巧之输入框提示语句
2016/07/28 Javascript
超详细的JS弹出窗口代码大全
2020/04/18 Javascript
node.js学习之base64编码解码
2016/10/21 Javascript
谈谈JS中常遇到的浏览器兼容问题和解决方法
2016/12/17 Javascript
Vue弹出菜单功能的实现代码
2018/09/12 Javascript
javascript实现前端分页效果
2020/06/24 Javascript
手写Vue2.0 数据劫持的示例
2021/03/04 Vue.js
[01:15:29]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第三局
2016/03/04 DOTA
Python 错误和异常小结
2013/10/09 Python
浅析Python编写函数装饰器
2016/03/18 Python
Python搭建HTTP服务器和FTP服务器
2017/03/09 Python
对python 通过ssh访问数据库的实例详解
2019/02/19 Python
Django获取应用下的所有models的例子
2019/08/30 Python
Vans荷兰官方网站:美国南加州的原创极限运动潮牌
2018/01/23 全球购物
培训主管岗位职责
2014/02/01 职场文书
旷课检讨书3000字
2014/02/04 职场文书
护士进修自我鉴定
2014/02/07 职场文书
我的大学生活演讲稿
2014/04/25 职场文书
2014年安全生产目标责任书
2014/07/23 职场文书
长城导游词300字
2015/01/30 职场文书
民事答辩状格式范文
2015/05/21 职场文书
2015年中学体育教师工作总结
2015/10/23 职场文书
如何用python清洗文件中的数据
2021/06/18 Python