我的编程空间,编程开发者的网络收藏夹
学习永远不晚

一文让你快速了解JavaScript栈

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

一文让你快速了解JavaScript栈

前言

前面两篇文章介绍了数据结构和算法的一些前置内容,这篇文章开始正式学习常见的数据结构,首先学习的就是(Stack)。

什么是栈?

栈全称为堆栈,是一种先进后出的的数据结构,栈中只有两种基本操作,也就是插入删除,也就是入栈和出栈操作栈只有一端可以进行入栈和出栈操作,我们将其称为栈顶,另一端称其为栈底;如下图展示了栈这个数据结构:

JavaScript中的栈

JavaScript并没有栈这个数据类型,但是可以通过数组进行模拟,而且数组中提供的push()pop()选项,正好实现先入后出的的操作,

示例代码如下:

const stack = []

// 入栈
stack.push(1)
stack.push(2)
// 出栈
const v1 = stack.pop() // 2
const v2 = stack.pop() // 1

栈的应用场景

栈是算法和程序中最常用的辅助结构,其的应用十分广泛,凡是需要先进后出场景都有栈的身影,比如:

  • 函数调用堆栈
  • 判断字符串括号是否有效

接下来我们依次来看:

函数调用堆栈

JavaScript中的函数调用堆栈就是一个应用栈的一个典型例子,比如下面这段代码:

function f1() {}
function f2() {
  f1()
}
function f3() {
  f2()
}
f3()

如下图:

执行过程如下:

  • 调用函数f3(),将f3压入堆栈;
  • f3()中调用了f2(),将f2压入堆栈;
  • f2()中又调用了f1(),将f1压入堆栈;
  • 只有f1()运行完成才能继续往下执行,所以f1()先出栈,以此类推。

有效的括号

有效的括号是力扣中的一个关于栈的算法题目,题目大意就是判断给定字符串中的括号是否匹配,匹配返回true,否则返回false

解题思路如下:

  • 判断字符串的长度是否为偶数,不为偶数直接返回false,因为括号都是成对出现的;
  • 新建一个栈;
  • 遍历字符串,遍历到每一项时如果时左括号,将其压入栈;如果是右括号,与栈顶对比,如果相匹配则出栈,不匹配则返回false

实现代码如下:


var isValid = function(s) {
    if (s.length % 2 !== 0) return false
    const stack = []
    for(let i = 0; i<s.length; i++) {
        const c = s[i] // 记录当前项
        if (c === '(' || c === '[' || c==='{') {
            stack.push(c)
        } else {
            const t = stack[stack.length - 1] // 获取栈顶元素
            if (
                (t === '(' && c === ')') ||
                (t === '[' && c === ']') ||
                (t === '{' && c === '}')
            ) {
                stack.pop()
            } else {
                return false
            }
        }
    }
    // 如果为0表示全部匹配,有剩余则表示不匹配
    return stack.length === 0
};

肯有还有更优的写法,这里直接使用的暴力解法。

总结

到此这篇关于一文让你快速了解JavaScript栈的文章就介绍到这了,更多相关JS 栈内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

一文让你快速了解JavaScript栈

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

一文带你快速理解git

随着软件开发的快速发展,版本控制也逐渐成为一个重要的话题。Git是目前最受欢迎的版本控制系统之一,它为程序员提供了一种有效的方法来跟踪代码的更改历史记录、协作开发以及管理不同的版本,尽管Git对于初学者可能略显复杂,但只要你按照以下步骤可以
2023-10-22

一篇小短文让你了解Maven

简介Apache Maven是一个项目管理及构建工具,主要用于Java项目的构建,Maven还可以用于构建和管理以C#,Ruby,Scala和其他语言编写的项目。Maven解决了构建软件那几方面问题:编译构建传统的项目没有使用Maven大部
2023-06-04

一文带你快速理解JavaScript中call()函数的使用

这篇文章主要为大家详细介绍了JavaScript中call()函数的使用的相关知识,文中的示例代码讲解详细,具有一定的学习价值,需要的可以参考一下
2023-03-23

一文带你快速了解C/C++标准库中的ptrdiff_t

ptrdiff_t是C/C++标准库中定义的一个与机器相关的数据类型,ptrdiff_t类型变量通常用来保存两个指针减法操作的结果,下面这篇文章主要给大家介绍了关于C/C++标准库中ptrdiff_t的相关资料,需要的朋友可以参考下
2022-11-16

都2023年了,Servlet还有必要学习吗?一文带你快速了解Servlet

文章目录 1. 前言2. Servlet 简介3. 快速入门4. 执行流程5. 生命周期6. 方法初识7. 体系结构8. urlPattern 配置9. XML配置10. 总结 1. 前言 起初,所有的 Web 网站都是静态的,
2023-08-17

一文带你快速了解JS正则表达式的使用方法

JavaScript中如何使用正则表达式?下面本篇文章带大家深入了解一下JavaScript正则表达式的使用方法,希望对大家有所帮助!
2023-05-14

一文带你了解JavaScript函数柯里化

柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。本文将通过一些示例带大家深入了解JS的函数柯里化,需要的可以参考一下
2023-02-01

一文让你了解透彻Java中的IO模型

本文只是说明了IO模型,让你了解IO模型是什么,怎么区分IO模型,以及分析了Java中的三种IO模型,本文是纯理论知识,看完之后会让你对IO有更加深刻的理解,感兴趣的同学可以参考一下
2023-05-18

一文了解你不知道的JavaScript异步篇

这篇文章主要为大家详细介绍了一些你不知道的JavaScript异步相关知识,文中的示例代码讲解详细,对我们学习JavaScript有一定帮助,感兴趣的可以跟随小编一起学习一下
2022-11-13

一文了解你不知道的JavaScript闭包篇

这篇文章主要为大家详细介绍了一些你不知道的JavaScript闭包相关知识,文中的示例代码讲解详细,对我们学习JavaScript有一定帮助,感兴趣的可以跟随小编一起学习一下
2022-11-13

编程热搜

目录