4、js数据结构与算法之栈

手把手教你用 JavaScript 实现常见数据结构与算法 你是否遇到过这样的场景?写前端代码时想优化列表渲染性能,却不知道用链表还是数组更高效;面试时被问“用 JS 实现一个栈”,结果卡壳在 API 设计;想自己写个小框架,却对虚拟 DOM 的树结构遍历一头雾水?本文正是为解决这些问题而生:覆盖6 类核心数据结构(数组、链表、栈、队列、树、图)和5 大经典算法(排序、搜索、递归、动态规划、贪心),用 JS 代码+生活案例,让你“既能写代码,又懂为什么这么写”。本文从“生活场景”切入,先讲数据结构(像认识工具),再讲算法(像学习工具的用法),最后用实战案例串联。 阅读详情

1、前言
栈是和列表类似的一种数据结构,它可用来解决计算机世界里的很多问题。栈是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样的操作很快,而且容易实现。栈的使用遍布程序语言实现的方方面面,从表达式求值到处理函数调用。

2、对栈的操作
   由于栈具有后入先出的特点,所以任何不在栈顶的元素都无法访问。为了得到栈底的元素,必须先拿掉上面的元素。
对栈的两种主要操作是将一个元素压入栈和将一个元素弹出栈。入栈使用push() 方法,出栈使用pop() 方法。
另一个常用的操作是预览栈顶的元素。pop() 方法虽然可以访问栈顶的元素,但是调用该方法后,栈顶元素也从栈中被永久性地删除了。peek() 方法则只返回栈顶元素,而不删除它。

2、实列
    存储数据的底层数据结构

//当向栈中压入一个新元素时,需要将其保存在数组中变量top 所对应的位置,然后将top 值加1,让其指向数组中下一个空位置
function push(element) {
    this.dataStore[this.top++] = element;
}
//返回栈顶元素,同时将变量top 的值减1
function pop() {
    return this.dataStore[--this.top];
}
//返回数组的第top-1 个位置的元素,即栈顶元素
function peek() {
    return this.dataStore[this.top-1];
}
//length() 方法通过返回变量top 值的方式返回栈内的元素个数:
function length() {
    return this.top;
}
//可以将变量top 的值设为0,轻松清空一个栈
function clear() {
    this.top = 0;
}
 
//数组dataStore 保存栈内元素,构造函数将其初始化为一个空数组。变量top 记录栈顶位置,被构造函数初始化为0,表示栈顶对应数组的起始位置0。如果有元素被压入栈,该变量的值将随之变化
function Stack() {
    this.dataStore = [];
    this.top = 0;
    this.push = push;
    this.pop = pop;
    this.peek = peek;
    this.clear = clear;
    this.length = length;
}
 
var s = new Stack();
s.push("David");
s.push("Raymond");
s.push("Bryan");
//length: 3
console.log("length: " + s.length());
//Bryan
console.log(s.peek());
 
var popped = s.pop();
//The popped element is: Bryan
console.log("The popped element is: " + popped);
//Raymond
console.log(s.peek());
s.push("Cynthia");
//Cynthia
console.log(s.peek());
s.clear();
//length: 0
console.log("length: " + s.length());
//undefined
console.log(s.peek());
s.push("Clayton");
//Clayton
console.log(s.peek());
参考书籍:数据结构与算法JavaScript描述

文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树leetcode-栈与队列227-基本计算器 II4932 人正在系统学习中

【AI实战派】从零部署YOLOv8:香橙派AIpro边缘端目标检测全流程解析 本文详细解析了在香橙派AIpro边缘设备上从零部署YOLOv8目标检测模型的全流程。内容涵盖硬件开箱、环境搭建、模型转换(ONNX到昇腾OM格式)以及编写Python推理脚本,并提供了性能优化与实战技巧,帮助开发者高效实现实时边缘AI应用。 阅读详情

相关推荐

自动驾驶仿真工具链集成:ECU TEST与VTD、VERISTAND的深度配置指南

本文详细介绍了自动驾驶仿真测试中ECU TEST、VTD与VERISTAND三大核心工具的深度集成与连接配置方法。通过解析工具链的角色分工,提供从单机到分布式部署的实战指南,并重点阐述了Test Bench Configuration与Test Configuration的关键参数设置、SSH免密登录配置,以及在线与离线工作模式的切换技巧,旨在帮助测试工程师高效构建稳定、自动化的硬件在环测试环境。

wind6的博客 791

JavaScript 数据结构与算法(栈)

栈是一种遵从后进先出(LIFO)原则的有序集合。 创建一个基于 JavaScript 数组的 Stack 类 声明 Stack 类 class Stack { constructor() { this.items = []; // {1} } } 向栈添加元素 push(element(s)) 添加一个(或几个)新元素到栈顶。 push(element) { this.items.push(element); } 从栈移除元素 pop() 移除栈顶的元素,同

kiku 905

Conda虚拟环境用conda和pip安装软件包的路径问题

解决在虚拟环境中用pip默认把软件包安装到全局site-packages中。

stone9528的博客 4万+

用JS实现对栈的操作

用JS实现对栈的操作 栈的结构:栈底、栈顶(栈是一种后入先出的结构) 栈的操作:入栈、出栈 栈的方法: push //栈顶添加元素 pop // 拿出栈顶元素 peek // 查看栈顶元素 isEmpty // 检查栈是否为空 clear // 移除栈的全部元素 size //获取栈的长度 下面通过Js模拟对于栈的操作,对栈有一个比较直观的感受 构造一个...

programmer_trip的博客 903

用废旧汽车电池DIY家用UPS:手把手教你低成本搭建Wi-Fi不断电系统

本文详细介绍了如何利用废旧汽车电池DIY低成本家用UPS系统,确保Wi-Fi设备在断电时持续供电。通过精选材料、电路搭建和安全防护,实现高效稳定的电源转换与智能切换,成本仅为市售UPS的三分之一。特别适合家庭办公和远程工作者提升网络供电可靠性。

weixin_29200485的博客 468

黑猫带你学eMMC协议第1篇:全网最全emmc协议中文详讲,这份学习框架图,你值得拥有!!!(持续更新中...)

黑猫带你学eMMC协议第7篇:全网最全emmc写保护详解(write protect) 黑猫带你学eMMC协议第8篇:emmc可靠写详解(Write Reliability) 黑猫带你学eMMC协议第9篇:emmc的分区配置(partitioning) 黑猫带你学eMMC协议第10篇:eMMC命令队列详解(CMDQ) 黑猫带你学eMMC协议第11篇:eMMC擦除详解(erase/trim/discard/sanitize/secure erase/secure trim…) 黑猫带你学eMMC协议第12篇:

黑猫奥利奥的博客 2万+

JS中的栈结构

JS中的栈结构 1 特点 只能在栈顶添加和删除元素(后进先出) 2 栈的操作 push(element): 添加一个新元素到栈顶位置. pop():移除栈顶的元素,同时返回被移除的元素。 peek():返回栈顶的元素,不对栈做任何修改(这个方法不会移除栈顶的元素,仅仅返回它)。 isEmpty():如果栈里没有任何元素就返回true,否则返回false。 clear():移除栈里的所有元素。 size():返回栈里的元素个数。这个方法和数组的length属性很类似。 3 实现栈的两种方式 基于数组实

cake_eat的博客 386

华为OD干了两个月,还是跑了

​本人工作了快13年,base南京。2024年2月份由于公司业务变动第一次拿到了公司发的大礼包,同时也面临着失业的问题,我对自己的技术还是很有信心的,但是,找了大概有一个多月时间,发现心意的工作的确不太好找,当然收到挺多家offer,就是薪资不太满意,外包也一直不想去,不过说实话外包给的薪资普遍要比自研的单位要高一些,最后为了钱还是进华为(既然选择外包那就选择好一些的吧),毕竟中年老男人工作不能断太久。

啊渊的专栏 1万+

JavaScript中的数据结构之栈结构

JavaScript中的数据结构之栈结构1.栈简介1.1 JavaScript代码实现1.1.1 封装一个简单的栈结构1.1.2 添加一个新元素到栈顶位置(入栈)1.1.3 移除栈顶元素,同时返回被移除的元素(出栈)1.1.4 返回栈顶元素,不对栈做任何修改1.1.5 判断是否为空栈1.1.6 返回栈里的元素个数(栈的大小)1.1.7 将栈结构的内容以字符形式返回2. 结尾 1.栈简介 栈(Stack),它是一种受限的线性表,后进先出(LIFO), 其限制是仅允许在表的一端进行插入和删除运算,这一端被称为栈

weixin_43218277的博客 351

【AI理论学习】深入理解扩散模型:Diffusion Models(DDPM)(理论篇)

继OpenAI在2021提出的文本转图像模型之后,越来越多的大公司卷入这个方向,例如谷歌相继推出了和。一些主流的文本转图像模型,例如,和采用了扩散模型()作为图像生成模型,这也引发了对扩散模型的研究热潮。与GAN相比,扩散模型训练更稳定,而且能够生成更多样的样本,OpenAI的论文也证明了

小哲的博客 5213

上机任务一:空气质量指数 (air quality index,AQI是定量描述空气质量状况的指数。为了更好地了解和人们身体健康息息相关的天气状况,本书模拟生成500条某地区天气数据,一行样本对应一天

调整后的R平方为0.4308,考虑了模型中的自由度,它略低于多重R平方,说明模型的解释能力可能有限。总的来说,新的模型相对于之前的模型在AIC值上更优,包含了最高温度(X2)和最低温度(X3)这两个重要的预测因子,并且对AQI的解释能力较好。在表中,Df表示自由度,Sum Sq表示总平方和,Mean Sq表示均方(总平方和除以自由度),F value表示F统计量,Pr(>F)表示对应的p值。在分析这些结果时,需要关注系数的显著性(p值),系数的方向(正向或负向影响),以及系数的大小(估计值)。

Mrrunsen的博客 723

算法(第四版)——栈

定义 栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。  代码实现 链表实现 public class St...

Finley.Hwang‘s Blog 613

PCL RANSAC拟合分割圆柱体模型【2026最新版】

使用RANSAC拟合分割圆柱的原理介绍、官网示例代码实现以及一个可视化拟合出来的圆柱的具体应用案例。博客长期更新,最近一次更新时间为:2026年1月28日。

点云侠的博客 40万+

JavaScript数据结构与算法(4)栈和队列

1.

yangyang的专栏 234

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

数据结构与算法JavaScript描述——栈 4.4 练习

栈 栈 栈:一种先入后出的数据结构 栈的操作 push()方法   入栈 pop()方法    出栈,可以访问栈顶元素,但同时栈顶元素彻底被删除。 peek()方法  只返回栈顶元素,而不会删除它。 clear()方法    清除栈内所有元素 length()方法    记录栈内元素的个数 empty属性,用于表示栈内是否含有元素 function stack(){ this...

u011435776的博客 816

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

重读《学习JavaScript数据结构与算法-第三版》- 第4章 栈

定场诗 金山竹影几千秋,云索高飞水自流; 万里长江飘玉带,一轮银月滚金球。 远自湖北三千里,近到江南十六州; 美景一时观不透,天缘有分画中游。 前言 本章是重读《学习JavaScript数据结构与算法-第三版》的系列文章,本章为各位小伙伴分享数据结构-栈的故事,请让胡哥带你走进栈的世界 栈 何为栈?栈是一种遵从后进先出(LIFO)原则的有序集合。 新添...

胡哥有话说 441

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

数据结构和算法javascript描述-栈(第4章)

版权声明 版权是一件很重要的事情,能写一本书或者翻译一本书需要付出艰辛的劳动。刚刚我已经跟机械工业出版社的人联系,欣喜的是他们说可以发布学习笔记,我才贴出来。 虽然贴出来了,但是如果有任何不妥的地方,本人承诺立即删除文章。也希望各位读者能够尊重别人的劳动果实。 前言 为什么要读《数据结构和算法》,或者把这个问题推广下为什么要不断的读书呢?是工作做不下去了吗?其实不是的,工作已经稳稳的。是热爱吗?也...

weixin_33819479的博客 109

栈--数据结构与算法Javascript描述(4)

栈 Stack 概念 栈是一种高效的数据结构,数据只能在栈顶添加或者删除,所以这样的操作很快,而且容易实现。栈的使用遍布程序语言的方方面面,从表达式求值到处理函数调用。 栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶。 对栈的操作 将一个元素压入栈(入栈):push( ) 将一个元素弹出栈(出栈):pop( ) 预览栈顶的元素:peek( ) 栈的实现 function...

weixin_30371469的博客 91

数据结构与算法JavaScript描述练习------第4章栈

2. 一个算术表达式的后缀表达式形式如下: op1 op2 operator 使用两个栈,一个用来存储操作数,另外一个用来存储操作符,设计并实现一个 JavaScript 函 数,该函数可以将中缀表达式转换为后缀表达式,然后利用栈对该表达式求值。编写一个函数,该函数接受一个算 术表达式作为参数,返回括号缺失的位置。想象一下你有一盒佩兹糖果,里面塞满了红 色、黄色和白色的糖果,但是你不喜欢黄色的糖果。使用栈(有可能用到多个栈)写一 段程序,在不改变盒内其他糖果叠放顺序的基础上,将黄色糖果移出。

maxiumII的专栏 335

js数据结构与算法:栈

目录💫.认识栈🍔.面向过程方法源码编写栈2.1思考2.2需要实现的方法2.3源码实现,并调用类 🧣.用面向对象的方法来源码书写3.1思考3.2需要实现的方法3.3源码及使用类 🥩​​​​​​​.总结在实现之前我们思考一下我们怎么实现首先我们借用数组的方法来实现,所以我们需要创建一个空数组来模拟栈 运行结果:那么在实现这个类,我们用对象来模拟栈 4.总结 了解了面向对象与面向过程 掌握了两种方式用什么来模拟栈 对栈模拟进行源码设计............

m0_51311990的博客 2333

javascript数据结构与算法

数据结构:数据的组织形式,如数组、链表、树、图等,用于高效存储和访问数据 算法:解决问题的步骤,是指令的有限序列,其中每条指令表示一个或多个操作。它具备有穷性(有限步骤内完成)、确定性(每一步都有确切含义)、可行性(能通过有限次操作实现)等基本特性 数据结构为算法提供了操作的对象和基础,而算法则通过操作这些数据结构中的数据来实现特定的功能和性能要求

Hi_MrXiao的博客 1286

JavaScript 版数据结构与算法

数据结构与算法

weixin_49809163的博客 1406

02【JS数据结构与算法】栈

写在前面 上一节我们介绍了JS中的第一个数据结构——数组,包括它里面的一些自带的方法、还有我们自己手动实现的方法、还有使用场景等。JS中的数组跟其他语言不太一样,它是动态增长的,所以它给我们编程带来了极大的灵活性。今天我们再来介绍另一种数据结构——栈,它其实可以看作是JS中的一种特殊的数组。 接下来的内容,我们按下图所示给大家介绍: 栈的描述 栈的功能其实跟数组类似,就是用来存储一些数据的,不过它跟数组不同的是:栈是一种后进先出(LIFO)的数据结构。怎么理解呢?就像是现实生活中我们在桌子上摞的

X北辰北的博客 712

《学习JavaScript数据结构与算法》核心知识点梳理

这本《学习JavaScript数据结构与算法》是前端和Node.js开发者入门数据结构与算法的经典读物。它的核心价值在于使用JavaScript这门熟悉的语言,来揭示计算机科学中基础且重要的概念。

宝青书坊 1577

拿捏javascript数据结构与算法(上)

本文参考《学习javascript数据结构与算法》,根据自己整理写下,如有错误的地方,欢迎大佬指正。 知识点: 第一章:javascript简介 第二章:ECMAscript和TypeScript概述 第三章:数组 第四章:栈 第五章:队列和双端对列 第六章:链表 第七章:集合 第八章:字典和散列表 第九章:递归 第一章js基础比较简单,在这里我就不浪费时间重复了,直接从第二章开始 第二章:ECMAscript和TypeScript概述 2.1 ECMAscript还是TypeScript 2.2 EC

十九万里的博客 2025
上一篇: 前端框架搭建知识
下一篇: 3、js数据结构与算法之队列
YUnicorn l
博客等级 码龄7年 448粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值