#
Queue
Очередь (Queue) — это структура данных, которая работает по принципу FIFO (First In, First Out). Это означает, что первый элемент, который добавляется в очередь, будет первым извлечен.
#
Создание Queue
#
Реализация Очереди с помощью класса (оптимизированная версия)
Чтобы избежать сдвига элементов при удалении, можно использовать объект с двумя указателями (head и tail).
class Queue {
constructor() {
this.items = {};
this.head = 0;
this.tail = 0;
}
enqueue(element) {
this.items[this.tail] = element;
this.tail++;
}
dequeue() {
if (this.isEmpty()) return undefined;
const item = this.items[this.head];
delete this.items[this.head];
this.head++;
return item;
}
peek() {
return this.isEmpty() ? undefined : this.items[this.head];
}
isEmpty() {
return this.head === this.tail;
}
size() {
return this.tail - this.head;
}
clear() {
this.items = {};
this.head = 0;
this.tail = 0;
}
}
#
Основные методы Queue
enqueue(element): Добавляет элемент в конец очередиdequeue(): Удаляет и возвращает первый элементpeek(): Показывает первый элемент без удаленияisEmpty(): Проверяет, пуста ли очередьclear(): Очищает всю очередьsize(): Возвращает количество элементов в очереди
#
Примеры работы с методами Queue
const queue = new Queue();
queue.enqueue("Alice");
queue.enqueue("Bob");
queue.enqueue("Charlie");
console.log(queue.dequeue()); // Alice
console.log(queue.peek()); // Bob
console.log(queue.size()); // 2
console.log(queue.isEmpty()); // false
queue.clear();
console.log(queue.isEmpty()); // true
#
Особенности Queue
1. Очередь работает по принципу FIFO
const queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
console.log(queue.dequeue()); // 1
console.log(queue.dequeue()); // 2
console.log(queue.dequeue()); // 3
Первый элемент, который зашел, выходит первым!
2. Очередь поддерживает ограничение по размеру (Fixed Queue)
Можно создать очередь с фиксированным размером, которая не позволяет добавлять элементы при переполнении.
class FixedQueue {
constructor(limit) {
this.items = {};
this.head = 0;
this.tail = 0;
this.limit = limit;
}
enqueue(element) {
if (this.size() >= this.limit) {
console.log("Очередь переполнена!");
return;
}
this.items[this.tail] = element;
this.tail++;
}
dequeue() {
if (this.isEmpty()) return undefined;
const item = this.items[this.head];
delete this.items[this.head];
this.head++;
return item;
}
size() {
return this.tail - this.head;
}
isEmpty() {
return this.head === this.tail;
}
}
// Пример использования
const queue = new FixedQueue(2);
queue.enqueue("Task 1");
queue.enqueue("Task 2");
queue.enqueue("Task 3"); // Очередь переполнена!
console.log(queue.dequeue()); // Task 1
console.log(queue.dequeue()); // Task 2
#
Заключение
Очередь (Queue) — это одна из ключевых структур данных, работающая по принципу FIFO (First In, First Out). Она широко используется в алгоритмах обработки данных, многозадачности и сетевых технологиях.