Как устроена очередь? Чем она отличается от стека?
Очередь — это структура данных, работающая по принципу FIFO. FIFO означает: То есть элемент, который был добавлен первым, извлекается первым.
Очередь — это структура данных, работающая по принципу FIFO.
FIFO означает:
First In — First OutТо есть элемент, который был добавлен первым, извлекается первым.
Пример из жизни — очередь в магазине: кто пришел первым, того обслуживают первым.
Как работает очередь?
Представим очередь:
начало → 10, 20, 30 ← конецЕсли добавить элемент 40, он попадет в конец:
начало → 10, 20, 30, 40 ← конецЕсли извлечь элемент, будет удален первый элемент 10.
начало → 20, 30, 40 ← конецОсновные операции очереди
1. Enqueue
Enqueue — добавление элемента в конец очереди.
const queue = [];
queue.push(10);
queue.push(20);
queue.push(30);const queue: number[] = [];
queue.push(10);
queue.push(20);
queue.push(30);package main
func main() {
queue := []int{}
queue = append(queue, 10)
queue = append(queue, 20)
queue = append(queue, 30)
}public class Example {
public static void main(String[] args) {
var queue = new java.util.ArrayList<Integer>();
queue.add(10);
queue.add(20);
queue.add(30);
}
}queue = []
queue.append(10)
queue.append(20)
queue.append(30)---
2. Dequeue
Dequeue — удаление элемента из начала очереди.
const first = queue.shift(); // 10const first = queue.shift(); // 10package main
func main() {
first := queue[0] // 10
}public class Example {
public static void main(String[] args) {
var first = queue.remove(0); // 10
}
}first = queue.pop(0) # 10---
3. Front
Просмотр первого элемента без удаления.
const front = queue[0];const front = queue[0];package main
func main() {
front := queue[0]
}public class Example {
public static void main(String[] args) {
var front = queue[0];
}
}front = queue[0]---
4. IsEmpty
Проверка, пуста ли очередь.
const isEmpty = queue.length === 0;const isEmpty = queue.length === 0;package main
func main() {
isEmpty := len(queue) == 0
}public class Example {
public static void main(String[] args) {
var isEmpty = queue.length() == 0;
}
}isEmpty = len(queue) == 0---
5. Size
Получение количества элементов в очереди.
const size = queue.length;const size = queue.length;package main
func main() {
size := len(queue)
}public class Example {
public static void main(String[] args) {
var size = queue.length();
}
}size = len(queue)Отличие очереди от стека
| Признак | Стек | Очередь |
|---|---|---|
| Принцип работы | LIFO | FIFO |
| Кто выходит первым | Последний добавленный | Первый добавленный |
| Пример | Стопка тарелок | Очередь в кассу |
| Добавление | На вершину | В конец |
| Удаление | С вершины | Из начала |
Где применяется очередь?
Очереди используются:
- в операционных системах;
- при планировании задач;
- в обработке запросов;
- в сетевых технологиях;
- в очередях печати;
- в алгоритме обхода графа в ширину;
- в системах сообщений;
- в веб-серверах.
Разновидности очередей
Есть несколько разновидностей очередей:
- обычная очередь;
- циклическая очередь;
- двусторонняя очередь;
- очередь с приоритетом.
В очереди с приоритетом первым извлекается не обязательно самый старый элемент, а элемент с наибольшим приоритетом.
Вывод
Очередь — это структура данных, где первым извлекается тот элемент, который был добавлен раньше всех. Главное отличие от стека: стек работает по принципу LIFO, а очередь — по принципу FIFO.
Источники
- Горбатов В.А., Горбатов А.В., Горбатова М.В. Дискретная математика: Учебник для студентов втузов. - М.: АСТ, 2014. - 448 с.
- Горбатов В.А., Горбатов А.В., Горбатова М.В. Теория автоматов: учебник для втузов. - М.: АСТ, 2008. - 559 с.
- Кузнецов О. П. Дискретная математика для инженера. - Санкт-Петербург [и др.]: Лань, 2009.
- Содержание курса лекций «Языки программирования». Кафедра алгоритмических языков ВМК МГУ, 2018.
- Босова Л.Л. Информатика. Базовый курс: учебник для 10-11 классов. - М.: БИНОМ. Лаборатория знаний, 2021.
- Гладкий Ю.Н. Информатика и информационные технологии: учеб. пособие. - М.: КноРус, 2020.