最新のデバイスを使用している場合は、気づかなかったとしてもスタック操作に遭遇したことがあるでしょう。スタックは、関数呼び出しの管理から元に戻す操作の有効化に至るまで、多くのプログラミング タスクの基礎となります。
スタックは、LIFO または FILO 構造でデータを編成する操作の順序に従う線形データ構造です。
LIFO: 後入れ先出し。
FILO: 先入れ後出し。
スタックは、要素の追加と削除、最上位の要素の表示、コレクションが空かフルかを表示するなど、要素のコレクションに対して操作を実行するために使用されます。
例:
現在 Web ブラウザで www.ESPN.com にアクセスしているときに、誤ってシカゴ ホワイトソックスの野球チケットの広告をクリックした場合。意図的にではないかもしれませんが、スタックに追加しましたが、現在はスタックの一番上にあります。そして、シカゴ・ホワイトソックスが15連敗していることに気づきました。さて...戻るボタンを押しましょう(スタックの一番上からその要素を削除します)。
はい、そこにあるものです。これは、スタック操作における LIFO 原則を示しています。最後に訪問したページを履歴 (またはスタック) から残して (削除し)、www.ESPN.com に戻ります...おそらく来年はホワイトソックスです。
スタック操作は、Web ブラウザーの注文履歴、テキスト エディターでの元に戻す/やり直し、関数呼び出しスタックなどを維持する必要があるアプリケーションでよく使用されます。
スタックを変更するときに一般的に使用される関数は次のとおりです。
.Push = 要素をスタックに追加します。
.pop = スタックから最上位の要素を削除します。
.peek = スタックの最上位要素を表示します。
.length/.size = スタック内のインデックスの合計を決定します。 JavaScript は (.length)
を使用します.isEmpty = スタックが空かどうかを確認します。
.isFull = スタックがいっぱいかどうかを確認します。配列のサイズが固定の場合。
スタック データ構造は、スタック クラスまたは通常の配列を使用して作成できます。
クラスを使用しないスタックの実装:
スタック クラスを使用せずにスタック操作を実行する場合、配列を使用してスタック操作をシミュレートします。
以下は、スタック操作を使用して数値の配列を反転する例です。 JSON.stringify を使用して、配列結果の値を目的の配列結果と比較します。
例:
// Reverse an array using stack operations let number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; // original array let numberList = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; // reversed array let ordernumberList = []; // array to store the reversed order // Loop through the numberList array to reverse its order for (var i = 0; i < number.length; i++) { let currentValue = numberList.pop(); // using the key .pop method to remove the last element from numberList ordernumberList.push(currentValue); // using the key .push method to push the popped element into ordernumberList } console.log(ordernumberList + " vs " + number); // compare the arrays // Convert both arrays into JSON strings for comparison if (JSON.stringify(ordernumberList) === JSON.stringify(number)) { console.log("The number list is reversed: " + ordernumberList); return ordernumberList; } else { console.log("The number list is not reversed: " + ordernumberList); }
最後の if-else ステートメントを強調したいと思います。 JSON.stringify メソッドを使用して 2 つの配列を比較しました。これがないと、配列の内容が同じであっても、比較で false が返され、else 条件がトリガーされてしまうためです。これは、JavaScript で配列を比較するときに、配列内の実際の内容ではなく、配列の参照 (つまり、メモリの場所) を比較するために発生します。
for ループを通してわかるように、メソッド .pop は最初にnumberList 配列の最後のインデックス (LIFO) を (削除) します。次に、.push メソッドを使用してそれを新しい配列 ordernumberList に追加し、元の配列を逆にします。
FILO は、スタック操作で変更された場合、ordernumberList 配列にプッシュされた最初のインデックスが最後の出力 (FILO) になるように定式化された新しい配列に入力されます。
この記事では、JavaScript でスタック操作を実装し、LIFO と FILO の原則を使用してスタックがどのように動作するかを調べました。 Web ブラウジングなどの現実世界のシナリオに見られるように、スタックを理解することは、多くのプログラミング タスクにとって不可欠です。
以上がJS スタック DS&A の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。