JavaScriptでの円形キューの実装方法


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で円形キューを実装する方法の例です。この実装を使うと、キューのサイズを超える要素を追加すると、古い要素が上書きされます。また、キューが空の状態で要素を削除しようとすると、エラーメッセージが表示されます。