Python queue (Очередь)

В языке Python queue (очередь) представляет собой структуру данных, которая работает по принципу "первым вошел, первым вышел" (FIFO - First In, First Out). Очередь позволяет добавлять элементы в конец очереди и извлекать элементы из начала очереди.

Методы класса queue

  • put(item): добавляет элемент item в конец очереди.
  • get(): извлекает и возвращает элемент из начала очереди.
  • empty(): возвращает True, если очередь пуста, и False в противном случае.

Метод put(): Добавление элемента в конец очереди

Метод put() добавляет элемент в конец очереди.

Пример использования метода put():

from queue import Queue

q = Queue()
q.put(1)
q.put(2)
q.put(3)

while not q.empty():
    print(q.get())  # Вывод: 1, 2, 3

В этом примере мы создаем объект Queue, затем добавляем элементы 1, 2 и 3 в конец очереди с помощью метода put(). Затем мы используем метод get(), чтобы извлечь и вывести элементы из начала очереди. Результатом будет последовательный вывод чисел 1, 2 и 3.

Метод get(): Извлечение элемента из начала очереди

Метод get() извлекает и возвращает элемент из начала очереди.

Пример использования метода get():

from queue import Queue

q = Queue()
q.put(1)
q.put(2)
q.put(3)

print(q.get())  # Вывод: 1
print(q.get())  # Вывод: 2
print(q.get())  # Вывод: 3

В этом примере мы создаем объект Queue и добавляем элементы 1, 2 и 3 в конец очереди с помощью метода put(). Затем мы используем метод get(), чтобы извлечь и вывести элементы из начала очереди. Результатом будет последовательный вывод чисел 1, 2 и 3.

Метод empty(): Проверка пустоты очереди

Метод empty() возвращает True, если очередь пуста, и False в противном случае.

Пример использования метода empty():

from queue import Queue

q = Queue()
print(q.empty())  # Вывод: True

q.put(1)
print(q.empty())  # Вывод: False

В этом примере мы создаем объект Queue и проверяем его пустоту с помощью метода empty(). При создании очередь пуста, поэтому метод возвращает True. Затем мы добавляем элемент 1 в очередь и снова проверяем пустоту. В этот раз метод возвращает False, так как очередь содержит элементы.

Класс LifoQueue

Класс LifoQueue является одной из реализаций структуры данных "очередь" в языке Python. Он представляет собой структуру данных, в которой элементы добавляются и удаляются по принципу "последний вошел - первый вышел" (Last In, First Out, LIFO).

Класс LifoQueue является подклассом класса Queue из модуля queue. Он наследует все методы и атрибуты класса Queue, но добавляет еще несколько собственных методов.

Для использования класса LifoQueue сначала необходимо импортировать его из модуля queue:

from queue import LifoQueue

Затем можно создать объект класса LifoQueue:

stack = LifoQueue()

Теперь объект stack представляет собой пустую LIFO-очередь. Мы можем добавлять элементы в очередь с помощью метода put(), а удалять элементы — с помощью метода get().

Пример использования класса LifoQueue:

from queue import LifoQueue

# Создание LifoQueue
stack = LifoQueue()

# Добавление элементов в LifoQueue
stack.put(1)
stack.put(2)
stack.put(3)

# Удаление элементов из LifoQueue
print(stack.get())  # Вывод: 3
print(stack.get())  # Вывод: 2
print(stack.get())  # Вывод: 1

В этом примере мы создаем объект stack класса LifoQueue, добавляем в него три элемента (1, 2 и 3) с помощью метода put(), а затем удаляем элементы из очереди с помощью метода get(). При каждом вызове метода get() будет возвращаться последний добавленный элемент. Таким образом, выводом будет последовательность чисел 3, 2 и 1.

Класс PriorityQueue

Класс PriorityQueue из модуля queue в языке Python представляет собой реализацию очереди с приоритетом. Это структура данных, в которой элементы добавляются и удаляются в порядке их приоритета.

Для использования класса PriorityQueue необходимо сначала импортировать его из модуля queue.

from queue import PriorityQueue

После этого можно создать экземпляр класса PriorityQueue.

queue = PriorityQueue()

Теперь у нас есть пустая очередь с приоритетом, в которую мы можем добавлять элементы.

Приоритет элементов определяется их значением. Числа с меньшим значением считаются более приоритетными.

Чтобы добавить элемент в очередь с приоритетом, используйте метод put(item).

queue.put(5)

Элементы будут автоматически располагаться в очереди согласно их приоритету.

Чтобы удалить элемент с наивысшим приоритетом из очереди, используйте метод get().

item = queue.get()
print(item)
# Output: 5

Метод get() удаляет элемент с наивысшим приоритетом из очереди и возвращает его значение.

Если очередь с приоритетом пуста, метод get() блокирует выполнение программы до тех пор, пока в очереди не появится новый элемент.

Класс PriorityQueue также предоставляет методы empty() и qsize() для проверки, является ли очередь пустой и получения текущего количества элементов в очереди соответственно.

Пример использования класса PriorityQueue:

from queue import PriorityQueue

queue = PriorityQueue()

queue.put((7, "Яблоко"))
queue.put((5, "Арбуз"))
queue.put((3, "Банан"))

while not queue.empty():
    item = queue.get()
    print(item)
# Output: (3, 'Банан'), (5, 'Арбуз'), (7, 'Яблоко')

Класс SimpleQueue

Очередь представляет собой коллекцию элементов, у которой есть две основные операции: добавление элемента в конец очереди и удаление элемента из начала очереди. Новые элементы всегда добавляются в конец очереди, а удаление происходит только из начала. Таким образом, элементы обрабатываются в порядке их добавления.

Класс SimpleQueue находится в модуле queue и имеет следующие методы:

  • put(item): Добавляет элемент item в конец очереди.
  • get(): Удаляет и возвращает элемент из начала очереди.
  • empty(): Проверяет, пустая ли очередь. Возвращает True, если очередь пустая, и False в противном случае.
  • qsize(): Возвращает текущий размер очереди, то есть количество элементов в ней.
  • task_done(): Сигнализирует о завершении обработки элемента. Используется вместе с методом join().
  • join(): Блокирует выполнение программы до тех пор, пока не будут обработаны все элементы в очереди.

Пример использования класса SimpleQueue:

from queue import SimpleQueue

# Создание очереди
queue = SimpleQueue()

# Добавление элементов в очередь
queue.put(1)
queue.put(2)
queue.put(3)

# Проверка размера очереди
size = queue.qsize()
print(size)
# Вывод: 3

# Проверка, пустая ли очередь
is_empty = queue.empty()
print(is_empty)
# Вывод: False

# Получение элементов из очереди
item1 = queue.get()
item2 = queue.get()
print(item1, item2)
# Вывод: 1 2

# Завершение обработки элементов
queue.task_done()

# Проверка, завершена ли обработка всех элементов
queue.join()