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 人正在系统学习中

AIGC内容溯源技术:如何追踪AI生成内容的原始来源 本文旨在系统性地介绍AIGC内容溯源的技术体系,帮助读者理解如何追踪AI生成内容的来源。我们将覆盖从基础概念到前沿技术的完整知识链,包括但不限于数字水印、区块链存证、内容指纹等技术方案。文章将从AIGC的基本概念出发,逐步深入探讨各种溯源技术,分析其原理和实现,最后讨论实际应用和未来趋势。AIGC:AI Generated Content,人工智能生成内容内容溯源:追踪数字内容的创作、修改和传播历史数字水印:嵌入在数字内容中的不可见识别信息数字水印:隐藏在内容中的识别信息,像隐形墨水内容指纹。 阅读详情

相关推荐

基于物联网技术智慧园林绿化养护管理信息平台

近几年来,随着经济不断的发展,城市面积不断的扩大,城市管理中的园林绿化工作也在这种趋势下不断的发生着深刻改变。管养企业是否按制定的管养计划严格执行?绿化事件整改是否及时到位?绿地面积是否在稳步增长?管养的效果如何?如何客观评价管养企业的管养工作?这些都是我们各级管理者需要面对的问题。   智慧园林绿化养护管理信息平台的开发思路以“考核”为核心,整个信息平台体现出“新、快、高、全、享”五个特点。   智慧园林绿化养护管理信息平台的整个开发理念为:依托五大技术手段(全球卫星定位系统技术、地理信...

Cesium的博客QQ2252224326 2460

JavaScript 数据结构与算法(栈)

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

kiku 905

citespace基本操作

聚类分析 时间线图 这些结果都是高被引文献的相关呈现结果,代表该领域的文献基础 下面可以看看该project的前沿领域 选择keywords 和term go! 调整显示方式 生成凸线图:表示 在某个研究领域或者时间段内 ,大家对某个领域或者某个词的关注度突然增高,凸显前沿方向的转变 以此来发现热点 ...

生信小博士的博客 1万+

用JS实现对栈的操作

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

programmer_trip的博客 903

《供应链金融风控模型设计:多维度数据整合与动态风险预警机制》

注:方案突出供应链金融「三流合一」(资金流、物流、信息流)的风控逻辑,通过多维度数据整合与动态预警,解决传统风控中中小企业信用评估难、链条风险传导监测滞后的问题。◦ 构建供应链拓扑图,计算「核心企业违约对上下游企业的影响系数」(如某电子厂商违约时,其前五大供应商的风险权重自动提升40%)• 区块链应用:将核心企业应付账款上链存证,防止「一票多融」欺诈(如某供应商用同一应收账款在多家银行融资)◦ 财务数据:核心企业审计报告、上下游企业纳税数据(增值税发票频次/金额)

2501_91651383的博客 1549

无监督学习初探:K-Means聚类与主成分分析(PCA)

K-Means适用于快速分组,但对数据分布敏感,可结合轮廓系数评估质量。PCA通过特征值分解实现线性降维,需注意非线性场景的替代方案(如UMAP)。进阶方向:聚类:谱聚类、高斯混合模型(GMM)处理复杂形状。降维:t-SNE、自编码器处理非线性结构。

weixin_69882801的博客 1454

JS中的栈结构

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

cake_eat的博客 386

Ubuntu安装ToDesk远程控制软件

前几天有同学问我怎么在 Ubuntu 系统上安装 ToDesk 远程控制软件, 帮他安装完成后就 顺手整理了一下安装过程,所以就顺手有了这篇在 Ubuntu 系统上安装 todesk 的文章。

小白的博客 8660

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

ubuntu20.04安装nvidia-docker(解决有 Release 文件。 N: 无法安全地用该源进行更新,所以默认禁用该源错误)

然后想都不要想,nvidia+linux安装的东西,那肯定是不能安装成功的,恶毒的nvidia。按照nvidia官网给出的安装nvidia-docker流程来。在sudo apt-get update出现报错。然后再次update,发现还是会有一些警告类似于。,直接点击网页手动下载,发现下载成功!,注意会有安装先后顺序,安装给的提示就行。最后输入命令发现安装成功。然后替换掉里面的内容。直接不管,直接上命令。

weixin_48144140的博客 1237

ScanNet数据集详解

ScanNet 是一个 RGB-D 视频数据集,在超过 1500 次扫描中包含了 250 万个视图,并标注了 3D 相机位姿、表面重建和实例级的语义分割。为了收集这些数据,设计了一个易于使用且具有扩展性的 RGB-D 捕获系统,包括自动化的表面重建和众包的语义标注。如果您想下载 ScanNet 数据,请使用您的机构邮箱地址填写一份 ScanNet 使用条款协议,并发送至 scannet@googlegroups.com。压缩包是将3D的标注信息“拍扁”成2D图片的结果,对应原始视频的每一帧。

frostmelody 全网同名,大家多多关注呀~ 持续分享优质内容! 3922

算法(第四版)——栈

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

Finley.Hwang‘s Blog 613

YOLOv11改进 | 模型知识蒸馏篇 | 利用模型蒸馏改进YOLOv11进行无损涨点 | 离线蒸馏(附代码 + 完整文件 + 解析教程)

这篇文章给大家带来的最新改进是模型的蒸馏,利用教师模型指导学生模型从而进行模型的涨点,本文的内容不仅可以用于论文中,在目前的绝大多数的工作中模型蒸馏是一项非常重要的技术,所以大家可以仔细学习一下本文的内容,本文从YOLOv8的项目文件为例,进行详细的修改教程,文章内包括完整的修改教程,针对小白我出了视频修改教程,如果你还不会我提供了修改后的文件大家直接运行即可,所以说不用担心不会适用!模型蒸馏真正的无损涨点,蒸馏你只看这一篇文章就足够了!欢迎大家订阅我的专栏一起学习YOLO!

Snu77的博客 4323

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

1.

yangyang的专栏 234

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

数据结构与算法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

数据结构和算法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、付费专栏及课程。

余额充值