利用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 相关文章推荐
自用js开发框架小成 学习js的朋友可以看看
Nov 16 Javascript
jQuery插件-jRating评分插件源码分析及使用方法
Dec 28 Javascript
JQuery入门—JQuery程序的代码风格详细介绍
Jan 03 Javascript
JavaScript中Cookie操作实例
Jan 09 Javascript
Bootstrap树形菜单插件TreeView.js使用方法详解
Nov 01 Javascript
微信小程序 仿猫眼实现实例代码
Mar 14 Javascript
vue router下的html5 history在iis服务器上的设置方法
Oct 18 Javascript
使用Vuex实现一个笔记应用的方法
Mar 13 Javascript
使用vue-router为每个路由配置各自的title
Jul 30 Javascript
关于Vue源码vm.$watch()内部原理详解
Apr 26 Javascript
JS实现盒子拖拽效果
Feb 06 Javascript
JS实现单张或多张图片持续无缝滚动的示例代码
May 10 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利用反射实现插件机制的方法
2015/03/14 PHP
php+ajax登录跳转登录实现思路
2016/07/31 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
2017/07/07 PHP
PHP项目多语言配置平台实现过程解析
2020/05/18 PHP
JavaScript延迟加载
2021/03/09 Javascript
一段非常简单的让图片自动切换js代码
2006/11/10 Javascript
javascript 尚未实现错误解决办法
2008/11/27 Javascript
Prototype的Class.create函数解析
2011/09/22 Javascript
JavaScript自定义事件介绍
2013/08/29 Javascript
JQuery中$.each 和$(selector).each()的区别详解
2015/03/13 Javascript
ajax的分页查询示例(不刷新页面)
2017/01/11 Javascript
JavaScript 函数节流详解及方法总结
2017/02/09 Javascript
基于模板引擎Jade的应用(详解)
2017/12/12 Javascript
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
Vue多组件仓库开发与发布详解
2019/02/28 Javascript
ES6的异步终极解决方案分享
2019/07/11 Javascript
React组件设计模式之组合组件应用实例分析
2020/04/29 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
微信小程序自定义扫码功能界面的实现代码
2020/07/02 Javascript
js加减乘除精确运算方法实例代码
2021/01/17 Javascript
[01:32]TI珍贵瞬间系列(一)
2020/08/26 DOTA
讲解python参数和作用域的使用
2013/11/01 Python
深入解析Python中的变量和赋值运算符
2015/10/12 Python
Python3中在Anaconda环境下安装basemap包
2018/10/21 Python
python实现根据文件关键字进行切分为多个文件的示例
2018/12/10 Python
Python爬虫之UserAgent的使用实例
2019/02/21 Python
python循环输出三角形图案的例子
2019/11/22 Python
Python 绘制可视化折线图
2020/07/22 Python
Visual Studio code 配置Python开发环境
2020/09/11 Python
CSS书写规范、顺序和命名规则
2014/03/06 HTML / CSS
error和exception有什么区别
2012/10/02 面试题
小车司机岗位职责
2013/11/25 职场文书
2015年党建工作总结
2015/03/30 职场文书
入党心得体会
2019/06/20 职场文书
python实现ROA算子边缘检测算法
2021/04/05 Python