以下に、いくつかの方法をコード例とともに説明します。
方法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でスタックを使用してキューを作成することができます。選択した方法に応じて、コードを実装してデータを順番に処理できるようになります。