利用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实现日历的简单功能
上一篇:macos怎么打开终端
上一篇:macos怎么打开终端

