• 技术文章 >web前端 >js教程

    一文了解JavaScript栈

    长期闲置长期闲置2022-07-29 15:13:30转载147
    本篇文章给大家带来了关于javascript的相关知识,主要介绍了一文让你快速了解JavaScript栈,栈全称为堆栈,是一种先进后出的的数据结构,栈中只有两种基本操作,也就是插入和删除,也就是入栈和出栈操作,栈只有一端可以进行入栈和出栈操作,希望对大家有帮助。

    【相关推荐:javascript视频教程web前端

    什么是栈?

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

    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()

    如下图:

    执行过程如下:

    有效的括号

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

    解题思路如下:

    实现代码如下:

    /**
     * @param {string} s
     * @return {boolean}
     */
    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视频教程web前端

    以上就是一文了解JavaScript栈的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:脚本之家,如有侵犯,请联系admin@php.cn删除
    专题推荐:javascript
    上一篇:怎么利用node生成word文档?使用库分享 下一篇:Node.js怎么实现分片上传?方法介绍
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 一文掌握JavaScript树结构深度优先算法• javascript构造方法的缺点是什么• javascript与es6的区别是什么• javascript支持多态吗• 什么叫渐进式javascript
    1/1

    PHP中文网