ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript スタックについて 1 つの記事で学ぶ

JavaScript スタックについて 1 つの記事で学ぶ

WBOY
WBOY転載
2022-07-29 15:13:301802ブラウズ

この記事では、javascript に関する関連知識をお届けします。主に JavaScript スタックをすぐに理解するのに役立つ記事を紹介します。スタックの完全名は stack で、先入れ後順です。 -out データ構造. スタックには挿入と削除の 2 つの基本的な操作、つまりプッシュとポップの操作しかありません. スタックの一方の端だけがプッシュとポップの操作を実行できます. 皆様のお役に立てれば幸いです。

JavaScript スタックについて 1 つの記事で学ぶ

[関連する推奨事項: JavaScript ビデオ チュートリアル Web フロントエンド ]

スタックとは?

スタックの完全名は stack で、先入れ後出し データ構造です。スタックには insert と 2 つの基本操作のみがあります。 削除 、つまり プッシュおよびポップ操作 スタックの一方の端のみをプッシュおよびポップできます 、これを スタックの先頭#と呼びます## 、もう一方の端は Stackbottom と呼ばれます。次の図はスタック データ構造を示しています。

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 をスタックにプッシュし、f1 を呼び出します()
  • f2() で再度実行し、f1スタックにプッシュします; f1()
  • が完了した場合にのみ、実行は続行されるため、
  • f1() が最初にスタックからポップアウトされます。 有効な括弧
有効な括弧は、Likou のスタックに関するアルゴリズムの質問です。質問の主な目的は、指定された文字列内の括弧が一致するかどうかを判断し、結果を返すことです。 # 一致する場合は ##true

、それ以外の場合は

false

が返されます。 問題解決のアイデアは次のとおりです:

文字列の長さが偶数かどうかを判断し、偶数でない場合は、括弧があるため、直接 false

が返されます これらはすべてペアで表示されます;
  • 新しいスタックを作成します; 文字列を走査し、各項目を走査するときに、次の場合左括弧の場合はスタックにプッシュし、右括弧の場合はスタックの先頭と比較し、一致する場合はスタックをポップし、一致しない場合は
  • 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 === &#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
};

もっと良い書き方があるかもしれませんが、ここでは暴力的な解決策を直接使用しています。 。

【関連する推奨事項:

JavaScript ビデオ チュートリアル

Web フロントエンド

]

以上がJavaScript スタックについて 1 つの記事で学ぶの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjb51.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。