JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptでスタック(Stack)クラスを実装する方法

スタックは「後入れ先出し(LIFO:Last In First Out)」と呼ばれるデータ構造で、最後に追加した要素が最初に取り出される仕組みです。JavaScriptの配列(Array)は実はスタックに必要な機能をすべて備えていますが、今回は学習を兼ねて、独自のStackクラスをゼロから実装してみましょう。

今回作成するクラスには、次のメソッドを持たせます。

  • push(element):スタックの先頭に要素を追加する
  • pop():先頭の要素を取り除き、その要素を返す
  • peek():スタックの先頭にある要素を参照する
  • isFull():スタックが要素数の上限に達しているかを判定する
  • isEmpty():スタックが空かどうかを判定する
  • clear():すべての要素を削除する
  • display():配列の内容をすべて表示する

Stackクラスの基本構造

まずは、スタックの最大サイズを受け取るコンストラクタと、ほかのメソッドを実装する際に役立つヘルパー用のdisplay()を持つ、シンプルなクラスを定義することから始めます。あわせて、スタックが満杯か空かを判定するisFull()isEmpty()も定義しておきましょう。

isFull()メソッドは、内部配列(container)の長さがmaxSize以上であるかどうかを確認して結果を返す、シンプルな実装です。

isEmpty()メソッドは、内部配列のサイズが0であるかどうかをチェックします。

これら2つのメソッドは、後ほどpushなどの操作を定義するときに活躍します。以降で定義するメソッドは、すべてこのStackクラスの中に記述していきます。

コード例

class Stack {

   constructor(maxSize) {

      // 最大サイズが指定されていない場合はデフォルト値を設定
      if (isNaN(maxSize)) {
         maxSize = 10;
      }
      this.maxSize = maxSize; // スタックの値を格納する配列を初期化
      this.container = [];
   }

   // 開発中に中身を確認するためのメソッド
   display() {
      console.log(this.container);
   }

   // 配列が空かどうかをチェック
   isEmpty() {
      return this.container.length === 0;
   }

   // 配列が満杯かどうかをチェック
   isFull() {
      return this.container.length >= this.maxSize;
   }

   push(element) {
      // スタックが満杯かどうかをチェック
      if (this.isFull()) {
         console.log("Stack Overflow!");
         return;
      }
      this.container.push(element);
   }
}

ポイント解説

constructorでは、引数として最大サイズを受け取ります。数値が指定されなかった場合(isNaNがtrueの場合)は、デフォルト値として10を設定しています。そして、スタックの中身を保持するための空の配列this.containerを初期化します。

push(element)では、要素を追加する前に必ずisFull()を呼び出してスタックが満杯でないかを確認します。もし上限に達していれば「Stack Overflow!」とコンソールに出力し、それ以上の追加を防ぎます。満杯でなければ、配列の末尾に要素を追加します。配列の末尾への追加・削除をスタックの「先頭」とみなすことで、LIFO構造を簡単に実現できるのがポイントです。

  1. JavaScriptでカスタム画像スライダーを作成する方法【初心者向け解説付き】

    Webサイトに動きを加える定番パーツのひとつが「画像スライダー(カルーセル)」です。ライブラリを使わなくても、HTML・CSS・JavaScriptの基本だけで、前後ボタンとナビゲーションドット付きのカスタムスライダーを簡単に作ることができます。この記事では、実際に動作する完全なサンプルコードを紹介しながら、それぞれの仕組みをわかりやすく解説します。完成形のサンプルコード以下のコードをそのままHTMLファイルとして保存し、ブラウザで開くと画像スライダーが動作します。<!DOCTYPE html> <html> <head> <meta name=&qu

  2. JavaScriptでスタックを実装する方法【サンプルコード付きで解説】

    スタック(Stack)は、最後に追加した要素が最初に取り出される「LIFO(Last In, First Out)」方式の基本的なデータ構造です。本記事では、JavaScriptを使ってスタックを実装する方法を、ブラウザ上で実際に動作するサンプルコードとともにわかりやすく解説します。 スタックの基本操作 push:スタックの一番上に新しい要素を追加します。 pop:スタックの一番上から要素を取り出して削除します。要素がない場合はアンダーフローとして扱います。 display:スタック内に格納されているすべての要素を表示します。 サンプルコード 以下は、JavaScriptでスタックを実装し