实现数据结构

83 阅读1分钟

循环队列

class Queue {
  constructor(size = 100) {
    this.size = size; //队列容量
    this.queue = new Array(size); //队列本体
    this.rear = 0; //队尾指针
    this.front = 0; //队首指针
  }
  push(val) {
    if (!this.isFilled()) {
      this.rear = (this.rear + 1) % this.size;
      this.queue[this.rear] = val;
    } else {
      throw new Error('queue is filled.');//已满抛出异常
    }
  }
  pop() {
    if (!this.isEmpty()) {
      this.front = (this.front + 1) % this.size;
      return this.queue[this.front];
    } else {
      throw new Error('queue is empty.');//已空抛出异常
    }
  }
  isEmpty() {
    return this.rear === this.front;
  }
  isFilled() {
    return (this.rear + 1) % this.size === this.front;
  }
}
const q = new Queue(5);
for (let i = 0; i < 4; i++) {
  q.push(i);
}

console.log(q); //Queue {size: 5,queue: [ <1 empty item>, 0, 1, 2, 3 ], rear: 4, front: 0}
console.log(q.isFilled()); //true
console.log(q.pop()); //0
q.push(4);
console.log(q); //Queue { size: 5, queue: [ 4, 0, 1, 2, 3 ], rear: 0, front: 1 }