利用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 相关文章推荐
php上传图片并给图片打上透明水印的代码
Jun 07 Javascript
js中call与apply的用法小结
Dec 28 Javascript
AngularJS入门教程之学习环境搭建
Dec 06 Javascript
Select2.js下拉框使用小结
Oct 24 Javascript
用jQuery的AJax实现异步访问、异步加载
Nov 02 Javascript
jquery做个日期选择适用于手机端示例
Jan 10 Javascript
Bootstrap列表组学习使用
Feb 09 Javascript
layui分页效果实现代码
May 19 Javascript
基于node搭建服务器,写接口,调接口,跨域的实例
May 13 Javascript
11个教程中不常被提及的JavaScript小技巧(推荐)
Apr 17 Javascript
基于vue-cli搭建多模块且各模块独立打包的项目
Jun 12 Javascript
javascript开发实现贪吃蛇游戏
Jul 31 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
discuz论坛 用户登录 后台程序代码
2008/11/27 PHP
CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)
2016/09/01 PHP
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
jquery改变tr背景色的示例代码
2013/12/28 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
JavaScript基础函数整理汇总
2015/01/30 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
2016/12/02 Javascript
解析ajaxFileUpload 异步上传文件简单使用
2016/12/30 Javascript
jQueryMobile之窗体长内容的缺陷与解决方法实例分析
2017/09/20 jQuery
Koa2 之文件上传下载的示例代码
2018/03/29 Javascript
vue引入js数字小键盘的实现代码
2018/05/14 Javascript
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
layui将table转化表单显示的方法(即table.render转为表单展示)
2019/09/24 Javascript
浅谈Vue组件单元测试究竟测试什么
2020/02/05 Javascript
Vue简单封装axios之解决post请求后端接收不到参数问题
2020/02/16 Javascript
详解JSON.stringify()的5个秘密特性
2020/05/26 Javascript
vue中配置scss全局变量的步骤
2020/12/28 Vue.js
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
Python中的if、else、elif语句用法简明讲解
2016/03/11 Python
python之Socket网络编程详解
2016/09/29 Python
Python利用Beautiful Soup模块创建对象详解
2017/03/27 Python
详解python3中socket套接字的编码问题解决
2017/07/01 Python
python django使用haystack:全文检索的框架(实例讲解)
2017/09/27 Python
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
python 处理dataframe中的时间字段方法
2018/04/10 Python
python+mysql实现学生信息查询系统
2019/02/21 Python
python excel转换csv代码实例
2019/08/26 Python
python应用文件读取与登录注册功能
2019/09/23 Python
python 微信好友特征数据分析及可视化
2020/01/07 Python
python logging通过json文件配置的步骤
2020/04/27 Python
keras实现图像预处理并生成一个generator的案例
2020/06/17 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
2020/06/23 Python
Clarisonic美国官网:科莱丽声波洁面仪
2017/10/12 全球购物
中学门卫岗位职责
2013/12/26 职场文书
2014年党务公开实施方案
2014/02/27 职场文书
会计求职信怎么写
2015/03/20 职场文书