利用JavaScript实现栈的数据结构示例代码

发布时间 - 2026-01-11 02:36:45    点击率:

前言

本文主要给大家介绍的是关于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中的算法与数据结构之栈(Stack)实例详解  # JavaScript数据结构之栈实例用法  # JS中数据结构之栈  # JavaScript数据结构学习之数组、栈与队列  # JavaScript数据结构中栈的应用之表达式求值问题详解  # javascript数据结构中栈的应用之符号平衡问题  # JavaScript实现栈结构Stack过程详解  # 串列  # 英语  # 转换为  # 的是  # 维基百科  # 是一种  # 相关内容  # 之处  # 可以用  # 也可  # 给大家  # 这篇文章  # 谢谢大家  # 来完成  # 为空  # 只允许  # 是为了  # 有疑问  # arguments 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  微信小程序 canvas开发实例及注意事项  网站建设要注意的标准 促进网站用户好感度!  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  Python进程池调度策略_任务分发说明【指导】  Laravel用户密码怎么加密_Laravel Hash门面使用教程  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  Laravel如何优化应用性能?(缓存和优化命令)  Firefox Developer Edition开发者版本入口  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  如何自定义建站之星网站的导航菜单样式?  晋江文学城电脑版官网 晋江文学城网页版直接进入  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  如何在万网开始建站?分步指南解析  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  网站制作软件免费下载安装,有哪些免费下载的软件网站?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  网页设计与网站制作内容,怎样注册网站?  EditPlus 正则表达式 实战(3)  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  如何在服务器上三步完成建站并提升流量?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  Laravel如何处理文件下载请求?(Response示例)  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  详解MySQL数据库的安装与密码配置  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  零基础网站服务器架设实战:轻量应用与域名解析配置指南  php485函数参数是什么意思_php485各参数详细说明【介绍】  如何有效防御Web建站篡改攻击?  js实现获取鼠标当前的位置  如何在建站主机中优化服务器配置?  无锡营销型网站制作公司,无锡网选车牌流程?  如何在阿里云通过域名搭建网站?  如何在阿里云香港服务器快速搭建网站?  网站制作报价单模板图片,小松挖机官方网站报价?  如何在局域网内绑定自建网站域名?  香港服务器部署网站为何提示未备案?  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  HTML 中动态设置元素 name 属性的正确语法详解  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  如何用狗爹虚拟主机快速搭建网站?  Java遍历集合的三种方式  Android使用GridView实现日历的简单功能