Heim > Web-Frontend > js-Tutorial > Hauptteil

Erfahren Sie in einem Artikel mehr über den JavaScript-Stack

WBOY
Freigeben: 2022-07-29 15:13:30
nach vorne
1833 Leute haben es durchsucht

Dieser Artikel vermittelt Ihnen relevantes Wissen über Javascript. Er stellt hauptsächlich einen Artikel vor, der Ihnen hilft, den JavaScript-Stack zu verstehen. Es handelt sich um eine First-In-Last-Out-Datenstruktur Es gibt nur zwei Grundtypen im Stapel, nämlich Einfüge- und Löschvorgänge, also Push- und Pop-Operationen. Ich hoffe, dass dies für alle hilfreich ist.

Erfahren Sie in einem Artikel mehr über den JavaScript-Stack

【Verwandte Empfehlungen: Javascript-Video-Tutorial, Web-Frontend

Was ist ein Stack?

Der vollständige Name des Stapels ist „Stack“. Es handelt sich um eine „First-In-Last-Out“-Datenstruktur. Es gibt nur zwei grundlegende Operationen im Stapel, nämlich „Einfügen“ und „Löschen“, also „Push- und Pop-Operationen“. , Nur ein Ende des Stapels kann geschoben und geöffnet werden , wir nennen es „Oberseite des Stapels“ und das andere Ende heißt „Unterseite des Stapels“. Die folgende Abbildung zeigt die Datenstruktur des Stapels: im JavaScript-StackJavaScript hat keinen Stack-Datentyp, kann aber über ein Array und die bereitgestellten Optionen push() und pop() simuliert werden Im Array wird nur „First-in-Last“ implementiert. Für Out-Operationen lautet der

const stack = []

// 入栈
stack.push(1)
stack.push(2)
// 出栈
const v1 = stack.pop() // 2
const v2 = stack.pop() // 1
Nach dem Login kopieren
Anwendungsszenarien des StapelsDer Stapel ist die am häufigsten verwendete Hilfsstruktur in Algorithmen und Programmen Anwendungen sind sehr umfangreich. Jedes Szenario, das First-In, Last-Out erfordert, hat einen Stapel, wie zum Beispiel:

  • Funktionsaufrufstapel

  • Bestimmen Sie, ob die Zeichenfolgenklammern gültig sind

    Schauen wir uns als nächstes Folgendes an:

    push()pop()选项,正好实现先入后出的的操作,

    示例代码如下:

    function f1() {}
    function f2() {
      f1()
    }
    function f3() {
      f2()
    }
    f3()
    Nach dem Login kopieren

    栈的应用场景

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

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

    接下来我们依次来看:

    函数调用堆栈

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

    /**
     * @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 === &#39;(&#39; || c === &#39;[&#39; || c===&#39;{&#39;) {
                stack.push(c)
            } else {
                const t = stack[stack.length - 1] // 获取栈顶元素
                if (
                    (t === &#39;(&#39; && c === &#39;)&#39;) ||
                    (t === &#39;[&#39; && c === &#39;]&#39;) ||
                    (t === &#39;{&#39; && c === &#39;}&#39;)
                ) {
                    stack.pop()
                } else {
                    return false
                }
            }
        }
        // 如果为0表示全部匹配,有剩余则表示不匹配
        return stack.length === 0
    };
    Nach dem Login kopieren

    如下图:

    执行过程如下:

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

    有效的括号

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

    解题思路如下:

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

    Funktionsaufrufstapel in JavaScript Es ist ein typisches Beispiel für einen Anwendungsstapel, wie zum Beispiel der folgende Code:

    rrreee

    Wie unten gezeigt:

    Der Ausführungsprozess ist wie folgt:

      Rufen Sie die Funktion f3() auf und ersetzen Sie f3. Push auf den Stapel. 🎜
    • f2() wurde in aufgerufen f3(), wobei f2 auf den Stapel geschoben wird; 🎜
    • In f2() wird f1() erneut aufgerufen , f1 auf den Stapel schieben; 🎜
    • Nur f1() Die Ausführung kann erst fortgesetzt werden, nachdem die Ausführung abgeschlossen ist, also f1() wird zuerst vom Stapel genommen und so weiter. 🎜🎜🎜Effektive Klammern🎜🎜Effektive Klammern sind eine Algorithmusfrage zu Stapeln in Likou. Die Hauptidee der Frage besteht darin, festzustellen, ob die Klammern in einer bestimmten Zeichenfolge übereinstimmen. Wenn sie übereinstimmen, wird true, andernfalls wird <code>false zurückgegeben. 🎜🎜🎜Die Idee zur Problemlösung lautet wie folgt: 🎜🎜
      • Bestimmen Sie, ob die Länge der Zeichenfolge eine gerade Zahl ist. Wenn es sich nicht um eine gerade Zahl handelt, wird direkt false zurückgegeben. Code>, weil die Klammern paarweise erscheinen; 🎜Erstellen Sie einen neuen Stapel. 🎜<li>Traversieren Sie die Zeichenfolge, und wenn es eine linke Klammer ist, schieben Sie sie auf den Stapel eine rechte Klammer, vergleichen Sie sie mit der Oberseite des Stapels. Wenn sie übereinstimmt, entfernen Sie sie aus dem Stapel. Wenn sie nicht übereinstimmt, geben Sie <code>false zurück. 🎜🎜🎜🎜Der Implementierungscode lautet wie folgt: 🎜🎜rrreee🎜🎜Es gibt vielleicht eine bessere Möglichkeit, ihn zu schreiben, aber hier wird direkt die Brute-Force-Lösung verwendet. 🎜🎜🎜【Verwandte Empfehlungen: 🎜Javascript-Video-Tutorial🎜, 🎜Web-Frontend🎜】🎜

    Das obige ist der detaillierte Inhalt vonErfahren Sie in einem Artikel mehr über den JavaScript-Stack. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:jb51.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!