JavaScriptでスタックを使用してキューを作成する方法


以下に、いくつかの方法をコード例とともに説明します。

方法1: 2つのスタックを使用する方法 この方法では、2つのスタックを使用してキューを実装します。1つのスタック(入力スタック)は、要素を追加するために使用し、もう1つのスタック(出力スタック)は、要素を取り出すために使用します。

class Queue {
  constructor() {
    this.inputStack = [];
    this.outputStack = [];
  }
  enqueue(item) {
    this.inputStack.push(item);
  }
  dequeue() {
    if (this.outputStack.length === 0) {
      // 入力スタックから出力スタックに要素を移動する
      while (this.inputStack.length > 0) {
        this.outputStack.push(this.inputStack.pop());
      }
    }
    return this.outputStack.pop();
  }
  isEmpty() {
    return this.inputStack.length === 0 && this.outputStack.length === 0;
  }
  size() {
    return this.inputStack.length + this.outputStack.length;
  }
}
// 使用例
const queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
console.log(queue.dequeue()); // 出力: 1
console.log(queue.dequeue()); // 出力: 2
console.log(queue.size()); // 出力: 1
console.log(queue.isEmpty()); // 出力: false

方法2: 1つのスタックを使用する方法 この方法では、1つのスタックを使用してキューを実装します。要素を追加する際には、一時的なスタックを使用して要素の順序を反転させます。

class Queue {
  constructor() {
    this.stack = [];
  }
  enqueue(item) {
    const tempStack = [];
    while (this.stack.length > 0) {
      tempStack.push(this.stack.pop());
    }
    this.stack.push(item);
    while (tempStack.length > 0) {
      this.stack.push(tempStack.pop());
    }
  }
  dequeue() {
    return this.stack.pop();
  }
  isEmpty() {
    return this.stack.length === 0;
  }
  size() {
    return this.stack.length;
  }
}
// 使用例
const queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
console.log(queue.dequeue()); // 出力: 1
console.log(queue.dequeue()); // 出力: 2
console.log(queue.size()); // 出力: 1
console.log(queue.isEmpty()); // 出力: false

これらの方法を使用すると、JavaScriptでスタックを使用してキューを作成することができます。選択した方法に応じて、コードを実装してデータを順番に処理できるようになります。