当前位置: 首页 > news >正文

【JavaScript】栈功能(先进后出)

在JavaScript中,虽然没有内置的栈(Stack)数据结构,但我们可以利用数组(Array)来实现栈的功能。

栈是一种遵循“后进先出”(Last In, First Out, LIFO)原则的线性数据结构。在栈中,添加(push)和移除(pop)元素的操作都在同一端进行,这一端被称为栈顶。

下面是如何使用JavaScript的数组来模拟栈的主要操作:

1、push(): 在数组的末尾添加一个或多个元素,类似于向栈中压入元素。
2、pop(): 移除数组的最后一个元素,并返回这个元素,类似于从栈顶弹出元素。
3、peek(): 查看数组的最后一个元素,但不移除它,类似于查看栈顶的元素而不弹出。
4、isEmpty(): 检查数组是否为空,类似于检查栈是否为空。
5、size(): 返回数组的长度,类似于获取栈中元素的数量。
下面是一个简单的栈实现示例:

class Stack {constructor() {this.items = [];}push(element) {this.items.push(element);}pop() {if (this.isEmpty()) {return "Underflow";}return this.items.pop();}peek() {return this.items[this.items.length - 1];}isEmpty() {return this.items.length === 0;}size() {return this.items.length;}printStack() {console.log(this.items.toString());}
}// 使用示例
const stack = new Stack();
stack.push(1);
stack.push(2);
stack.push(3);
stack.printStack(); // 输出: 1,2,3console.log(stack.pop()); // 输出: 3;移除数组的最后一个元素,并返回这个元素
console.log(stack.peek()); // 输出: 2;查看数组的最后一个元素,但不移除它
console.log(stack.size()); // 输出: 2;返回数组的长度

在这个例子中,我们定义了一个 Stack 类,它使用数组来存储栈中的元素。push() 方法用于将元素添加到栈顶,pop() 方法用于移除并返回栈顶元素,peek() 方法返回栈顶元素但不移除,isEmpty() 方法检查栈是否为空,size() 方法返回栈中元素的数量,而 printStack() 方法则用于打印栈中所有元素。

备注:使用数组来实现栈是一种常见的做法,因为它简单且有效。如果你需要更高级的栈功能,如优化的性能或额外的错误处理,可以考虑使用专门的库或自己实现更复杂的逻辑。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • WebSocket 协议介绍
  • 谷粒商城实战笔记-103~104-全文检索-ElasticSearch-Docker安装ES和Kibana
  • 什么是嵌入式
  • uniapp中实现语音识别(app+小程序)
  • C++解决:早餐组合
  • 抽象代数精解【4】
  • Web开发:用C#的逻辑理解VUE语法(VUE + Webapi小白开发笔记)
  • k8s安装ingress-nginx
  • [H贪心] lc100376. 新增道路查询后的最短距离 II(贪心+读题+代码实现+周赛409_3)
  • web3 solana
  • 机器学习练手(六):机器学习算法实践实战
  • 【深度学习】【框架】【基本结构】transformer
  • Python如何将Category类的数组categoryList,导出成JSON格式
  • Action部署在线上写文章
  • C#根据反射操作对象
  • JS 中的深拷贝与浅拷贝
  • ES6之路之模块详解
  • HTTP中GET与POST的区别 99%的错误认识
  • LintCode 31. partitionArray 数组划分
  • Material Design
  • MySQL用户中的%到底包不包括localhost?
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • vue脚手架vue-cli
  • 从setTimeout-setInterval看JS线程
  • 物联网链路协议
  • 《码出高效》学习笔记与书中错误记录
  • 2017年360最后一道编程题
  • HanLP分词命名实体提取详解
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​人工智能书单(数学基础篇)
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • #if等命令的学习
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (52)只出现一次的数字III
  • (Ruby)Ubuntu12.04安装Rails环境
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (力扣题库)跳跃游戏II(c++)
  • (一)基于IDEA的JAVA基础1
  • (转)mysql使用Navicat 导出和导入数据库
  • (轉貼) UML中文FAQ (OO) (UML)
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .form文件_一篇文章学会文件上传
  • .gitattributes 文件
  • .NET COER+CONSUL微服务项目在CENTOS环境下的部署实践
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .NET项目中存在多个web.config文件时的加载顺序
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [android] 请求码和结果码的作用
  • [Angular] 笔记 8:list/detail 页面以及@Input