class CircularQueue {
constructor(size) {
this.size = size;
this.queue = new Array(size);
this.front = -1;
this.rear = -1;
}
enqueue(data) {
if ((this.front == 0 && this.rear == this.size - 1) || (this.rear == (this.front - 1) % (this.size - 1))) {
console.log('キューがいっぱいです');
return;
} else if (this.front == -1) {
this.front = 0;
this.rear = 0;
this.queue[this.rear] = data;
} else if (this.rear == this.size - 1 && this.front != 0) {
this.rear = 0;
this.queue[this.rear] = data;
} else {
this.rear++;
this.queue[this.rear] = data;
}
}
dequeue() {
if (this.front == -1) {
console.log('キューは空です');
return;
}
let data = this.queue[this.front];
this.queue[this.front] = undefined;
if (this.front == this.rear) {
this.front = -1;
this.rear = -1;
} else if (this.front == this.size - 1) {
this.front = 0;
} else {
this.front++;
}
return data;
}
display() {
if (this.front == -1) {
console.log('キューは空です');
return;
}
let displayString = '';
if (this.rear >= this.front) {
for (let i = this.front; i <= this.rear; i++) {
displayString += this.queue[i] + ' ';
}
} else {
for (let i = this.front; i < this.size; i++) {
displayString += this.queue[i] + ' ';
}
for (let i = 0; i <= this.rear; i++) {
displayString += this.queue[i] + ' ';
}
}
console.log('キューの
内容:
', displayString);
}
}
// 使用例
const queue = new CircularQueue(5);
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
queue.display(); // 出力: キューの
内容:
1 2 3
queue.dequeue();
queue.display(); // 出力: キューの
内容:
2 3
queue.enqueue(4);
queue.enqueue(5);
queue.enqueue(6); // キューがいっぱいです
queue.display(); // 出力: キューの
内容:
2 3 4 5
queue.dequeue();
queue.dequeue();
queue.display(); // 出力: キューの
内容:
4 5
以上がJavaScriptで円形キューを実装する方法の例です。この実装を使うと、キューのサイズを超える要素を追加すると、古い要素が上書きされます。また、キューが空の状態で要素を削除しようとすると、エラーメッセージが表示されます。