队列简介
- 一个先进先出的数据结构、保证有序
- javascript没有队列,可以用array数据结构模拟队列的功能
队列实现
- size: 队列的大小
- max: 队列的最大容量
- p: 入队指针
- q: 出队指针
- Queue Overflow: 队列溢出
- Queue Underflow: 队列下溢
入队示例
出队示例(Queue Underflow)
入队示例
入队示例(Queue Overflow)
出队示例
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)
- 生产者-消费者模式
- 缓冲区
- 优先级队列