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

JavaScriptでスタッククラスを実装する方法【完全なコード例つき】

スタック(Stack)は、「後入れ先出し(LIFO: Last In, First Out)」と呼ばれる基本的なデータ構造の一つです。最後に追加した要素が最初に取り出されるという特性を持つため、ブラウザの履歴管理や元に戻す(Undo)機能など、さまざまな場面で活用されています。

この記事では、JavaScriptでスタッククラスを実装する方法を、完全なサンプルコードとともにわかりやすく解説します。

スタッククラスの完全な実装

以下は、JavaScriptで記述したスタッククラスの完全な実装例です。

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);
    }

    pop() { // 空かどうかをチェック
        if (this.isEmpty()) {
            console.log("Stack Underflow!");
            return;
        }
        this.container.pop();
    }

    peek() {
        if (this.isEmpty()) {
            console.log("Stack Underflow!");
            return;
        }
        return this.container[this.container.length - 1];
    }

    clear() {
        this.container = [];
    }
}

各メソッドの解説

constructor(コンストラクタ)

スタックの最大サイズを受け取ります。引数が数値として無効な場合(NaNの場合)は、デフォルト値として10が設定されます。また、要素を格納するための空の配列 container を初期化します。

display()

現在スタックに格納されているすべての要素をコンソールに出力します。デバッグ時に内容を確認するのに便利です。

isEmpty() / isFull()

isEmpty() はスタックが空かどうかを、isFull() はスタックが最大サイズに達しているかどうかを判定し、真偽値を返します。

push(element)

新しい要素をスタックの一番上に追加します。追加前に満杯かどうかをチェックし、満杯の場合は「Stack Overflow!」というメッセージを出力して処理を中断します。

pop()

スタックの一番上にある要素を取り除きます。空のスタックに対して呼び出された場合は「Stack Underflow!」というメッセージを出力して処理を中断します。

peek()

スタックの一番上にある要素を、取り除かずに参照して返します。スタックが空の場合はエラーメッセージを表示します。

clear()

スタック内のすべての要素を削除し、初期状態に戻します。

実際の使用例

このスタッククラスは次のように使えます。

const stack = new Stack(5);

stack.push(10);
stack.push(20);
stack.push(30);

stack.display();          // [10, 20, 30]
console.log(stack.peek()); // 30

stack.pop();
stack.display();          // [10, 20]

console.log(stack.isEmpty()); // false
stack.clear();
console.log(stack.isEmpty()); // true

このように、スタッククラスを実装しておけば、サイズ制限付きの安全なデータ管理が可能になり、あふれ(オーバーフロー)や空参照(アンダーフロー)といったエラーも適切にハンドリングできます。アルゴリズムの学習や実際のアプリケーション開発において、ぜひ活用してみてください。

  1. JavaScriptのスタックデータ構造とは?LIFOの基本とクラス実装をわかりやすく解説

    スタック(Stack)は、ほとんどのプログラミング言語で利用される抽象データ型(ADT:Abstract Data Type)の一つです。トランプのカードの山や皿の積み重ねのように、現実世界の「積み重ね」と同じように振る舞うことから、この名前が付けられました。 スタックの特徴:LIFO(後入れ先出し)構造 スタックの最大の特徴は、操作できるのが片方の端だけであるという点です。この特性により、スタックは LIFO(Last-In-First-Out:後入れ先出し) 型のデータ構造として動作します。つまり、最後に追加された要素が最初に取り出されます。 スタックの用語では、要素を挿入する操作を P

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

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