Назад к вопросам
Intern
109
questionbank
Что вы знаете о структуре данных 'очередь'?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Очередь (Queue) — это линейная структура данных, реализующая принцип FIFO (First-In, First-Out): первый добавленный элемент будет первым удален.
Основные операции:
- enqueue (помещение в очередь): добавление элемента в конец очереди.
- dequeue (извлечение из очереди): удаление элемента из начала очереди.
- peek (или front): получение значения элемента в начале очереди без его удаления.
- is_empty: проверка, пуста ли очередь.
- size: получение текущего количества элементов в очереди.
Реализации:
- Список (List): Неэффективно для больших очередей из-за O(n) при удалении с начала (смещении элементов).
# Добавление queue = [] queue.append(item) # Удаление if queue: item = queue.pop(0) # O(n) операция - collections.deque: Двусвязный список, оптимизированный для быстрого добавления/удаления с обоих концов. O(1) для enqueue и dequeue.
import collections # Создание queue = collections.deque() # Добавление queue.append(item) # O(1) # Удаление if queue: item = queue.popleft() # O(1) - queue.Queue: Потокобезопасная реализация для многопоточных приложений. Использует
collections.dequeвнутри. Методыput()иget()потокобезопасны.import queue # Создание q = queue.Queue() # Помещение (можно использовать таймаут) q.put(item) # Получение (можно использовать таймаут или блокировку) try: item = q.get(block=False) # не блокирующий вызов except queue.Empty: pass # Очередь пуста # Сообщить об успешной обработке элемента q.task_done()
Применение:
- Обработка запросов сервером.
- Буферизация данных.
- Реализация алгоритмов (например, поиск в ширину - BFS).
- Потокобезопасное взаимодействие между потоками (с помощью
queue.Queue).