最新のデバイスを使用している場合は、気づかなかったとしてもスタック操作に遭遇したことがあるでしょう。スタックは、関数呼び出しの管理から元に戻す操作の有効化に至るまで、多くのプログラミング タスクの基礎となります。
スタックは、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最後の if-else ステートメントを強調したいと思います。 JSON.stringify メソッドを使用して 2 つの配列を比較しました。これがないと、配列の内容が同じであっても、比較で false が返され、else 条件がトリガーされてしまうからです。これは、JavaScript で配列を比較するときに、配列内の実際の内容ではなく、配列の参照 (つまり、メモリの場所) を比較するために発生します。
for ループを通してわかるように、メソッド .pop は最初にnumberList 配列の最後のインデックス (LIFO) を (削除) します。次に、.push メソッドを使用してそれを新しい配列 ordernumberList に追加し、元の配列を逆にします。
FILO は、スタック操作で変更された場合、ordernumberList 配列にプッシュされた最初のインデックスが最後の出力 (FILO) になるように定式化された新しい配列に入力されます。
この記事では、LIFO と FILO の原則を使用してスタックがどのように動作するかを調べ、JavaScript でスタック操作を実装しました。 Web ブラウジングなどの現実世界のシナリオに見られるように、スタックを理解することは、多くのプログラミング タスクにとって不可欠です。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3