利用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 相关文章推荐
兼容ie和firefox js关闭代码
Dec 11 Javascript
jQuery 页面载入进度条实现代码
Feb 08 Javascript
js简单实现用户注册信息的校验代码
Nov 15 Javascript
jQuery打印图片pdf、txt示例代码
Jul 22 Javascript
Js与Jq获取浏览器和对象值的方法
Mar 18 Javascript
jQuery ajax请求返回list数据动态生成input标签,并把list数据赋值到input标签
Mar 29 Javascript
网页中JS函数自动执行常用三种方法
Mar 30 Javascript
深入剖析javascript中的exec与match方法
May 18 Javascript
基于vue.js轮播组件vue-awesome-swiper实现轮播图
Mar 17 Javascript
js实现轮播图的完整代码
Oct 26 Javascript
Vue之封装公用变量以及实现方式
Jul 31 Javascript
toString.call()通用的判断数据类型方法示例
Aug 28 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语法(4)
2006/10/09 PHP
E路文章系统PHP
2006/12/11 PHP
深入PHP购物车模块功能分析(函数讲解,附源码)
2013/06/25 PHP
PHP中的traits简单使用实例
2015/05/13 PHP
php获取flash尺寸详细数据的方法
2016/11/12 PHP
PHP设计模式之模板方法模式定义与用法详解
2018/04/02 PHP
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
2010/03/14 Javascript
基于jquery的商品展示放大镜
2010/08/07 Javascript
jQuery提示效果代码分享
2014/11/20 Javascript
Bootstrap每天必学之导航组件
2016/04/25 Javascript
JavaScript性能优化总结之加载与执行
2016/08/11 Javascript
jQuery实现的简单排序功能示例【冒泡排序】
2017/01/13 Javascript
ES6中Symbol类型用法实例详解
2017/04/06 Javascript
在vue-cli 3中给stylus、sass样式传入共享的全局变量
2019/08/12 Javascript
js实现踩五彩块游戏
2020/02/08 Javascript
vue el-tree 默认展开第一个节点的实现代码
2020/05/15 Javascript
JS实现电脑虚拟键盘的操作
2020/06/24 Javascript
vue+element实现动态加载表单
2020/12/13 Vue.js
[40:10]2015国际邀请赛全明星表演赛
2015/08/07 DOTA
Python基础之getpass模块详细介绍
2017/08/10 Python
Python 多线程的实例详解
2017/09/07 Python
Python进阶之尾递归的用法实例
2018/01/31 Python
Python实现替换文件中指定内容的方法
2018/03/19 Python
python判断文件是否存在,不存在就创建一个的实例
2019/02/18 Python
python中数组和矩阵乘法及使用总结(推荐)
2019/05/18 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
2019/05/31 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
2019/11/11 Python
flask的orm框架SQLAlchemy查询实现解析
2019/12/12 Python
CSS3 translate导致字体模糊的实例代码
2019/08/30 HTML / CSS
如何进行Linux分区优化
2016/09/13 面试题
八年级音乐教学反思
2014/01/09 职场文书
小学六一儿童节活动方案
2014/08/27 职场文书
岗位竞聘报告范文
2014/11/06 职场文书
2014年宣传工作总结
2014/11/18 职场文书
植树节新闻稿
2015/07/17 职场文书
Pandas实现批量拆分与合并Excel的示例代码
2022/05/30 Python