利用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 相关文章推荐
关于this和self的使用说明
Aug 01 Javascript
关于Javascript模块化和命名空间管理的问题说明
Dec 06 Javascript
在Windows上安装Node.js模块的方法
Sep 25 Javascript
Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明介绍)
Jul 09 Javascript
js 绑定键盘鼠标事件示例代码
Feb 12 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
Dec 26 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
Aug 18 Javascript
node使用Koa2搭建web项目的方法
Oct 17 Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
Nov 22 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
Feb 02 jQuery
关于微信公众号开发无法支付的问题解决
Dec 28 Javascript
layui对工具条进行选择性的显示方法
Sep 19 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一些服务器端特性的配置加强php的安全
2006/10/09 PHP
php下获取客户端ip地址的函数
2010/03/15 PHP
PHP文件上传原理简单分析
2011/05/29 PHP
php操作SVN版本服务器类代码
2011/11/27 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
php读取远程gzip压缩网页的方法
2014/12/29 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
2019/06/03 PHP
Thinkphp 框架配置操作之动态配置、扩展配置及批量配置实例分析
2020/05/15 PHP
提高 DHTML 页面性能
2006/12/25 Javascript
document.compatMode的CSS1compat使用介绍
2014/04/03 Javascript
js自定义Tab选项卡效果
2017/06/05 Javascript
微信小程序中使用Promise进行异步流程处理的实例详解
2017/08/17 Javascript
解决js ajax同步请求造成浏览器假死的问题
2018/01/18 Javascript
详解微信小程序input标签正则初体验
2018/08/18 Javascript
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
使用Angular Cli如何创建Angular私有库详解
2019/01/30 Javascript
JS 图片压缩原理与实现方法详解
2020/04/29 Javascript
微信小程序转化为uni-app项目的方法示例
2020/05/22 Javascript
python发腾讯微博代码分享
2014/01/10 Python
Python打印scrapy蜘蛛抓取树结构的方法
2015/04/08 Python
在Mac OS上搭建Python的开发环境
2015/12/24 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
2018/04/02 Python
python字符串string的内置方法实例详解
2018/05/14 Python
Python实现平行坐标图的绘制(plotly)方式
2019/11/22 Python
pytorch构建多模型实例
2020/01/15 Python
Windows系统下pycharm中的pip换源
2020/02/23 Python
Visual Studio code 配置Python开发环境
2020/09/11 Python
澳大利亚墨水站Ink Station:墨水和碳粉打印机墨盒
2019/03/24 全球购物
青年文明号服务承诺
2014/03/31 职场文书
就业协议书怎么填
2014/09/15 职场文书
领导班子四风对照检查材料
2014/09/23 职场文书
安全隐患整改报告
2014/11/06 职场文书
家属联谊会致辞
2015/07/31 职场文书
​(迎国庆)作文之我爱我的祖国
2019/09/19 职场文书
如何利用golang运用mysql数据库
2022/03/13 Golang
Mysql 数据库中的 redo log 和 binlog 写入策略
2022/04/26 MySQL