JS算法探险之栈(Stack)

本文探讨了栈在JavaScript算法中的应用,包括后缀表达式、小行星碰撞、判断括号正确性、每日温度问题以及直方图最大面积的解决。通过实例介绍了如何利用栈的后进先出特性解决这些算法问题,提供了详细的代码实现。
摘要由CSDN通过智能技术生成

前额叶是大脑控制中枢。> 人类是所有动物中,唯一能够自主控制自己的欲望、情绪和冲动的动物,能够为了将来更大的利益而延迟满足当下的需求。

今天,我们继续探索JS算法相关的知识点。我们来谈谈关于{栈| Stack}的相关知识点和具体的算法。

如果,想了解其他数据结构的算法介绍,可以参考我们已经发布的文章。如下是算法系列的往期文章。

文章list

  • 整数
  • 常规排序算法
  • 数组
  • 字符串
  • 链表

好了,天不早了,干点正事哇。


文章概要

0.知识点简讲
1.后缀表达式
2.小行星碰撞
3.判断括号的正确性
4.每日温度
5.直方图最大面积

知识点简讲

栈是个啥

栈是一种遵从后进先出LIFO)原则的有序集合。新添加或待删除的元素都保存在栈的同一端,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底

栈也被用在编程语言的_编译器_和内存中保存变量、方法调用等,也被用于_浏览器历史记录_(浏览器的返回按钮)。

而在前端,Stack耳熟能详的功能就是调用栈,调用栈就是用来管理函数调用关系的一种数据结构,是 JavaScript 引擎追踪函数执行的一个机制。

还有一个比较重要的用处就是在解析器中,无论是HTML/Vue/JavaScript,在生成对应的AST的时候,针对Token进行匹配处理。此时,就可以利用Stack后进先出的特性,进行匹配处理。

解析HTML生成的AST

解析Vue模板生成的AST

关于调用栈的详细介绍,可以翻阅我们之前 文章。这里就不在赘述。

栈的应用(算法方向)

在一些题目中,数据保存的顺序使用顺序相反,即最后保存的数据最先使用,这与栈的_后进先出_特性契合,可以将数据保存到栈中。

最低0.47元/天 解锁文章
AI画手小王
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JS数据结构之栈(Stack)
庚中
01-05 1932
Stack 特点:先进后出(也叫LIFO:last in first out) 结构图: 栈常见的操作: push(element):添加一个新元素到栈顶位置; pop():移除栈顶的元素,同时返回被移除的元素; peek():返回栈顶的元素,不对栈做任何修改(该方法不会移除栈顶的元素,仅仅返回它); isEmpty():如果栈里没有任何元素就返回true,否则返回false; size():返回栈里的元素个数。这个方法和数组的length属性类似; toString():将栈结构的内容以字符串的形式返
JS Stack
Flowerwine的博客
04-01 195
JS Stack 栈 原文地址
js(JavaScript)数据结构之栈Stack
星辰迷上大海的博客
01-10 1316
栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。栈只能对栈顶进行操作,不关心内部的元素状态。栈通常用于需要后进先出的数据处理场景,栈的特点是只能在栈顶进行添加和删除操作,添加的元素会放在栈顶,删除的元素也会从栈顶位置开始。例如浏览器的历史记录、括号匹配等。
使用jsstack类的实现
weixin_33852020的博客
04-06 156
使用jsstack类的实现 /*使用栈stack类的实现*/ function stack() { this.dataStore = [];//保存栈内元素,初始化为一个空数组 this.top = 0;//栈顶位置,初始化为0 this.push = push;//入栈 this.pop = pop;//出栈 this.peek = peek;//查看...
JS中的算法与数据结构之栈(Stack)实例详解
10-16
栈(Stack)是一种重要的数据结构,在JavaScript编程语言中扮演着重要的角色。它的特点类似于日常生活中的堆放物品的方式,物品的增加和移除只能在一端进行,这一端称为栈顶。这种数据结构符合后进先出(LIFO, last-in...
C++栈stack算法 最全面
最新发布
07-23
cout栈算法"; cout初始值为 http://www.acm.org"<<'\n'; cout网址-访问 QUIT 结束 BACK 回到上一个网址 FORWARD 将当前页面变成最新页面"; stack<string>backward; stack<string>forward; string c; string ...
JS的函数调用栈stack size的计算方法
12-11
如下的方法可以为你计算出你使用的JavaScript引擎可以支持多深的调用(由Ben Alman的一段代码获得灵感): function computeMaxCallStackSize() { try { return 1 + computeMaxCallStackSize(); } catch (e) { //
JS堆栈
weixin_48995066的博客
03-31 2201
堆&栈 堆是堆内存(heap)的简称,栈是栈内存(stack)的简称。 javascript的基本数据类型都是按值存储在栈内存中,每种类型的数据占用的空间大小都是确定的。 javascript的引用数据类型是存储在堆内存中,其实,说存储在堆内存中也不太准确,因为引用数据类型的内存地址是存储在栈内存中,当我们想要访问引用数据类型的值的时候,需要先从栈内存中获得对象的内存地址,然后在通过内存地址找到所需要的数据。 栈中的基本数据类型 基本数据类型的值保存在栈内存中。访问方式是按值访问 ...
JSstack类的实现与使用方法示例
11-28
本文实例讲述了JSstack类的实现与使用方法。分享给大家供大家参考,具体如下: 栈是一种“先进后出”的数据结构,原理如下图所示: 示例代码: /*使用栈stack类的实现*/ function stack() { this.dataStore = [];//保存栈内元素,初始化为一个空数组 this.top = 0;//栈顶位置,初始化为0 this.push = push;//入栈 this.pop = pop;//出栈 this.peek = peek;//查看栈顶元素 this.clear = clear;//清空栈 this.length = len
JavaScript中的栈数据结构(Stack
肥晨开发的学习之路
06-09 1165
栈是一种遵从后进先出(LIFO)原则的有序集合。新添加的或待删除的元素都保存在栈的同一端,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。注:LIFO:last in first out。
jsStack类和队列Queue类
kalinux的博客
08-23 905
1,•ToPrimitive(Number): 将一个对象值转换为原始值,首先调用obj.valueOf().如果返回值是一个原始值,则返回这个原始值.如果不是,则再调用obj.toString().如果返回值是个原始值,返回这个原始值.否则,抛出TypeError异常. •ToPrimitive(String): 和上面的方法类似,只是优先调用obj.toString()方法而不是obj.val...
JavaScript数据结构——栈(Stack
瓜冬瓜的博客
06-21 352
栈是一种后进先出(LIFO)的数据结构。
jstack
紫蝶侠的博客
11-23 133
查看进程的cpu使用率 top 查看进程中的线程 top -Hp 28965 将进程pid=28965 的进程 jstack -l 28965 > test.js 如何使用jstack分析线程状态
js模拟的Stack
吴安国的专栏
09-17 320
/* * 对象堆栈 * author: 吴安国 * version: 1.0 */ function Stack() { this.stack = new Array(); } /** * 移除堆栈顶部的对象,并作为此函数的值返回该对象。 * @return object */ Stack.prototype.pop = function(){ r
JS中的算法与数据结构——栈(Stack)
面向对象的夜猫子
09-26 483
栈(Stack) 上一篇我们说到了列表,它是一种最自然的数据组织方式,如果对数据的存储顺序要求不重要,那么列表就是一种非常适合的数据结构,但对于计算机其他的一些应用(比如后缀表达式),那么列表就显得有些无能为力, 所以,我们需要一种和列表功能相似但更复杂的数据结构。 栈,又叫堆栈,是和列表类似的一种数据结构,但是却更高效,因为栈内的元素只能通过列表的一端访问,称为栈顶,数据只能在栈顶添加或
js stack and heap(js栈和堆)
ikscher的专栏
08-12 9603
先看一段代码: object function setName(obj) { obj.name = 'Nicholas'; obj = new Object(); obj.name = 'Greg'; } var obj = new Object(); setName(obj); alert(obj.name); //”Nicholas” 输出是什么呢?
谈谈JS的栈(stack)和堆(heap)
麋鹿麋鹿迷了路
09-05 4595
前言 之前在学习js的时候就已经知道栈和堆了,但老是忘记,对这两个概念很混淆,今天特地又去学习了一遍,特此记录一下,温故知新 在JS中,我们知道数据类型分为 原始类型(number, string, boolean, null, undefined) 引用类型(object) =&gt; Array, function, data, RegExp 原始类型都是保存在栈当中,引用类型都是...
java数据结构与算法之栈Stack)设计与实现
05-24
栈(Stack)是一种常见的数据结构,它是一种只允许在一端进行插入和删除操作的线性表,这一端被称为栈顶。栈的特点是后进先出(Last-In-First-Out,简称 LIFO),即最后压入栈的元素最先弹出。 在 Java 中,可以使用数组或链表来实现栈。下面分别介绍数组和链表实现栈的方法。 1. 数组实现栈 数组实现栈时,需要定义一个数组和一个指针 top,top 指向栈顶。栈中的元素从数组的末尾开始存储,每当有一个元素入栈时,top 指针加 1;每当有一个元素出栈时,top 指针减 1。 以下是一个基于数组实现的栈的示例代码: ```java public class ArrayStack { private int[] stack; // 栈数组 private int top; // 栈顶指针 public ArrayStack(int size) { stack = new int[size]; top = -1; // 初始化栈顶指针为 -1 } // 判断栈是否为空 public boolean isEmpty() { return top == -1; } // 判断栈是否已满 public boolean isFull() { return top == stack.length - 1; } // 入栈 public void push(int data) { if (isFull()) { System.out.println("栈已满,无法入栈。"); return; } stack[++top] = data; } // 出栈 public int pop() { if (isEmpty()) { System.out.println("栈为空,无法出栈。"); return -1; } return stack[top--]; } // 获取栈顶元素 public int peek() { if (isEmpty()) { System.out.println("栈为空,无法获取栈顶元素。"); return -1; } return stack[top]; } } ``` 2. 链表实现栈 链表实现栈时,需要定义一个链表头节点和一个指针 top,top 指向栈顶。每当有一个元素入栈时,该元素成为新的头节点,其 next 指针指向原来的头节点;每当有一个元素出栈时,头节点指针向下移动一个位置。 以下是一个基于链表实现的栈的示例代码: ```java public class LinkedStack { private Node top; // 栈顶指针 public LinkedStack() { top = null; // 初始化栈顶指针为 null } // 判断栈是否为空 public boolean isEmpty() { return top == null; } // 入栈 public void push(int data) { Node newNode = new Node(data); newNode.next = top; top = newNode; } // 出栈 public int pop() { if (isEmpty()) { System.out.println("栈为空,无法出栈。"); return -1; } int data = top.data; top = top.next; return data; } // 获取栈顶元素 public int peek() { if (isEmpty()) { System.out.println("栈为空,无法获取栈顶元素。"); return -1; } return top.data; } private class Node { private int data; private Node next; public Node(int data) { this.data = data; this.next = null; } } } ``` 以上是两种常见的栈的实现方法,它们在效率和空间占用上略有差别,具体实现应根据具体情况选择。
写文章

热门文章

  • JS遍历对象的七种方法 26790
  • 【HTML 教程系列第 22 篇】 HTML 中的 input 标签,看这一篇就够了 26393
  • Github进行fork后的仓库,如何与原仓库同步? 15396
  • CSS单行/多行文本溢出隐藏 13760
  • highlight.js(代码高亮插件) 11392

最新评论

  • bpmn.js + vue + vuex的业务实现-自定义连线、箭头的颜色和虚线

    在田野的田田: 为什么还要钱看呀

  • vite+vue3如何配置ESLint与prettier?

    RickRelax: 完美的抄袭,抄别人的文章,然后自己打广告?牛的表情包 原文Link: https://juejin.cn/post/7142815651294511135

  • Naive UI 组件使用体验之-级联选择 Cascader

    美酒没故事°: 复选框怎么去掉啊

  • Canvas drawImage() 方法实现图片压缩

    weixin_44946095: 压缩后会影响图片清晰度吗

  • Github进行fork后的仓库,如何与原仓库同步?

    早上真好: 现在仓库网页端会显示当前分支与原仓库分支的区别,不管是多的commit还是少的commit都有,同步仓库和提pr都变得很方便了

最新文章

  • CTF-记一次PWN练习
  • CTF PWN之精确覆盖变量数据
  • CISA《网络安全事件和漏洞响应手册》提到的SSVC是什么?
2023年95篇
2022年259篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司杨浦网站优化报价天水百度网站优化山西网站关键词排名优化策略禹州智能网站优化来电咨询新民企业网站优化温州网站优化快速排名seo网站优化方法阳春网站seo优化服务网站咨讯做seo优化昌平网站优化公司哪家好如何优化网站效果最好医疗网站的优化推广网站关键词优化怎么选网站优化的主要的工作是潜山网站优化收费标准赤峰网站优化河南搜索引擎网站优化销售行业网站优化目的莱山智能营销网站优化公司栾城网站优化推广哪家好双峰网站优化公司静安区谷歌网站优化定制方案济宁济南网站关键词优化公司图片怎么优化网站排名南平网站优化在线咨询百度优化公司网站武清网站关键词优化联系电话音乐网站优化seo韶关网站优化方案崇左网站优化哪家好歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化