Очереди представляют собой набор элементов, который следует правилу first-in-first-out («первым пришел-первым вышел») - сокращенно FIFO. Очередь позволяет нам вставлять элементы с одного конца (называемого хвостом) и удалять их из очереди с другого конца (называемого головой).
Чтобы создать структуру данных очереди, давайте использовать фабричную функцию, которая возвращает очередь в виде объекта JavaScript. Внутри этой функции мы инициализируем пустой массив с именем queue.
Очередь, которую мы создаем, также будет иметь различные свойства и методы внутри нее. Начнем с метода, который добавляет элементы в очередь только с одной стороны.
myQueue = () => {
const queue = []
return {
add(x) {
queue.unshift(x)
}
}
}Здесь add() использует метод unshift для добавления элемента x в начало массива queue. Теперь нам нужно написать функцию, которая удаляет последний элемент из массива.
myQueue = () => {
const queue = []
return {
add(x) {
queue.unshift(x)
},
remove() {
return queue.pop()
}
}
}Благодаря этому у нас есть функция, которая будет строить нашу структуру данных очереди, как показано ниже:
const marvelMovies = myQueue()
marvelMovies.add('Iron Man')
marvelMovies.add('Captain America')Теперь в соответствии с обычным поведением массива мы должны иметь элемент Iron Man с индексом 0, а Captain America - с индексом 1. Но поскольку marvelMovies - это очередь, Iron Man изначально был с индексом 0, и когда Captain America был добавлен в очередь, Iron Man был перемещен в индекс 1, а Captain America теперь находится в индексе 0.
Удалить элементы из очереди просто. Все, что мы здесь делаем, это берем последний элемент в queue и извлекаем его.при помощи метода pop.
Давайте добавим некоторую дополнительную функциональность в функцию, чтобы проверить следующий удаляемый элемент, длину очереди и, если очередь пуста или нет.
myQueue = () => {
const queue = []
return {
add(x) {
queue.unshift(x)
},
remove() {
return queue.pop()
},
next() {
return queue[queue.length - 1]
},
length() {
return queue.length
},
empty() {
return queue.length === 0
}
}
}

