研习算法(续四)-队列实现(javascript版)

131 阅读1分钟

队列简介

  • 一个先进先出的数据结构、保证有序
  • javascript没有队列,可以用array数据结构模拟队列的功能

队列实现

  • size: 队列的大小
  • max: 队列的最大容量
  • p: 入队指针
  • q: 出队指针
  • Queue Overflow: 队列溢出
  • Queue Underflow: 队列下溢 image.png

入队示例

image.png

出队示例(Queue Underflow)

image.png

入队示例

image.png

image.png

入队示例(Queue Overflow)

image.png

出队示例

image.png image.png

image.png

class Queue {
  constructor(max = 1000) {
    this.data = Array.from({ length: max });
    // 入队指针
    this.p = 0;
    // 出队指针
    this.q = 0;
    this.size = 0;
    this.max = max;
  }
  enqueue(item) {
    if (this.size === this.max) {
      throw "Queue Overflow";
    }
    // 赋值完 + 1
    this.data[this.p++] = item;
    if (this.p === this.max) {
      this.p = 0;
    }

    this.size++;
    return this.size;
  }
  dequeue() {
    if (this.size === 0) {
      throw "Queue Underflow";
    }
    // 取完在 + 1
    const res = this.data[this.q++];
    if (this.q === this.max) {
      this.q = 0;
    }
    this.size--;
    return res;
  }
}
const queue = new Queue(5);
queue.enqueue("a");
queue.enqueue("b");
queue.enqueue("c");
queue.enqueue("d");
queue.enqueue("e");
console.log(queue.dequeue());
console.log(queue.dequeue());
console.log(queue.dequeue());
console.log(queue.dequeue());
console.log(queue.dequeue());

其他问题

  • 广度优先搜索
  • Array.push/shift - O(N) !== queue.enqueue/dequeue - O(1)
  • 生产者-消费者模式
  • 缓冲区
  • 优先级队列