Що таке Черга Python?
Черга - це контейнер, що містить дані. Дані, які вводяться першими, будуть видалятися спочатку, а отже, черга також називається "Перший вихід" (FIFO). Черга має два кінці спереду і ззаду. Предмети вводяться з тильної сторони і виймаються з лицьової сторони.
У цьому підручнику з Python ви дізнаєтесь:
- Що таке Черга Python?
- Як працює черга Python?
- Типи черги в Python
- Встановлення черги Python
- Методи, доступні в класі Queue та LifoQueue
- Приклад "Перший у черзі"
- Приклад черги Last In First Out
- Додайте більше 1 елемента в чергу
- Черга сортування
- Черга заднім ходом
Як працює черга Python?
Чергу можна легко порівняти з реальним прикладом, коли люди, які чекають у черзі біля каси, першим отримає той, хто стоїть першим, а потім наступний і так далі. Така ж логіка стосується і структури даних черги.
Ось схематичне зображення черги:
Задня є точкою , в якій елементи вставлені всередині черги. У цьому прикладі 7 є значенням для цього.
Фронт являє собою точку , в якій будуть видалені елементи з черги. Якщо ви видалите елемент із черги, першим елементом, який ви отримаєте, є 1, як показано на малюнку.
Елемент 1 був першим, який було вставлено в чергу, а під час видалення він вийшов першим. Отже, черга називається FIRST IN FIRST OUT (FIFO)
У черзі елементи видаляються по порядку і не можуть бути вилучені посередині. Ви просто не можете вилучити елемент 5 випадковим чином із черги, для цього вам доведеться видалити всі елементи до 5. Елементи в черзі будуть видалені в тому порядку, в якому вони були вставлені.
Типи черги в Python
У Python в основному існує два типи черги:
- Перший у черзі Перший вихід: для цього елемент, який йде першим, вийде першим.
Для роботи з FIFO вам потрібно викликати клас Queue () з модуля черги.
- Останнє в черзі першого виходу: тут елемент, який введений останнім, вийде першим.
Для роботи з LIFO вам потрібно викликати клас LifoQueue () з модуля черги.
Встановлення черги Python
Працювати з чергою в python дуже просто. Ось кроки, які слід виконати, щоб використовувати чергу в коді.
Крок 1) Вам просто потрібно імпортувати модуль черги, як показано нижче:
import queue
Модуль доступний за замовчуванням з python, і вам не потрібна будь-яка додаткова установка, щоб почати працювати з чергою. Існує 2 типи черги FIFO (перший вихід першим виходом) та LIFO (останній вихід першим виходом).
Крок 2) Для роботи з чергою FIFO викликайте клас Queue, використовуючи модуль черги, імпортований, як показано нижче:
import queueq1 = queue.Queue()
Крок 3) Для роботи з чергою LIFO викличте клас LifoQueue (), як показано нижче:
import queueq1 = queue.LifoQueue()
Методи, доступні в класі Queue та LifoQueue
Нижче наведені важливі методи, доступні всередині класу Queue та LifoQueue:
- put (item): Це помістить елемент всередину черги.
- get (): Це поверне вам елемент із черги.
- empty (): Поверне true, якщо черга порожня, і false, якщо присутні елементи.
- qsize (): повертає розмір черги.
- full (): повертає true, якщо черга повна, інакше false.
Приклад "Перший у черзі"
У випадку першого виходу першим вихід вийде першим.
Додавання та додавання в чергу
Давайте попрацюємо на прикладі, щоб додати елемент у чергу. Щоб розпочати роботу з чергою, спочатку імпортуйте чергу модулів, як показано в прикладі нижче.
Щоб додати елемент, можна скористатися методом put (), як показано в прикладі:
import queueq1 = queue.Queue()q1.put(10) #this will additem 10 to the queue.
За замовчуванням розмір черги нескінченний, і ви можете додати до неї будь-яку кількість елементів. Якщо ви хочете визначити розмір черги, те саме можна зробити наступним чином
import queueq1 = queue.Queue(5) #The max size is 5.q1.put(1)q1.put(2)q1.put(3)q1.put(4)q1.put(5)print(q1.full()) # will return true.
Вихід:
True
Тепер розмір черги 5, і це не займе більше 5 елементів, а метод q1.full () поверне true. Додавання будь-яких елементів не призведе до подальшого виконання коду.
Видаліть елемент із черги
Щоб видалити елемент із черги, можна скористатися методом get (). Цей метод дозволяє елементи з черги при виклику.
Наступний приклад показує, як видалити елемент із черги.
import queueq1 = queue.Queue()q1.put(10)item1 = q1.get()print('The item removed from the queue is ', item1)
Вихід:
The item removed from the queue is 10
Приклад черги Last In First Out
У випадку останнього в першій черзі виходу, елемент, який введено останнім, вийде першим.
Для роботи з LIFO, тобто останнього в першій черзі, нам потрібно імпортувати модуль черги та скористатися методом LifoQueue ().
Додавання та додавання в чергу
Тут ми зрозуміємо, як додати елемент до черги LIFO.
import queueq1 = queue.LifoQueue()q1.put(10)
Вам потрібно використовувати метод put () у LifoQueue, як показано у наведеному вище прикладі.
Видаліть елемент із черги
Щоб видалити елемент із LIFOqueue, ви можете скористатися методом get ().
import queueq1 = queue.LifoQueue()q1.put(10)item1 = q1.get()print('The item removed from the LIFO queue is ', item1)
Вихід:
The item removed from the LIFO queue is 10
Додайте більше 1 елемента в чергу
У наведених вище прикладах ми бачили, як додати один елемент та видалити елемент для FIFO та LIFOqueue. Тепер ми побачимо, як додати більше одного елемента, а також видалити його.
Додавання та додавання в чергу FIFOqueue
import queueq1 = queue.Queue()for i in range(20):q1.put(i) # this will additem from 0 to 20 to the queue
Видаліть елемент із черги FIFOque
import queueq1 = queue.Queue()for i in range(20):q1.put(i) # this will additem from 0 to 20 to the queuewhile not q1.empty():print("The value is ", q1.get()) # get() will remove the item from the queue.
Вихід:
The value is 0The value is 1The value is 2The value is 3The value is 4The value is 5The value is 6The value is 7The value is 8The value is 9The value is 10The value is 11The value is 12The value is 13The value is 14The value is 15The value is 16The value is 17The value is 18The value is 19
Додайте та додайте в чергу LIFOqueue
import queueq1 = queue.LifoQueue()for i in range(20):q1.put(i) # this will additem from 0 to 20 to the queue
Видаліть елемент із черги LIFO
import queueq1 = queue.LifoQueue()for i in range(20):q1.put(i) # this will additem from 0 to 20 to the queuewhile not q1.empty():print("The value is ", q1.get()) # get() will remove the item from the queue.
Вихід:
The value is 19The value is 18The value is 17The value is 16The value is 15The value is 14The value is 13The value is 12The value is 11The value is 10The value is 9The value is 8The value is 7The value is 6The value is 5The value is 4The value is 3The value is 2The value is 1The value is 0
Черга сортування
У наступному прикладі показано сортування черги. Алгоритм, який використовується для сортування, - це сортування за допомогою міхура.
import queueq1 = queue.Queue()#Addingitems to the queueq1.put(11)q1.put(5)q1.put(4)q1.put(21)q1.put(3)q1.put(10)#using bubble sort on the queuen = q1.qsize()for i in range(n):x = q1.get() # the element is removedfor j in range(n-1):y = q1.get() # the element is removedif x> y :q1.put(y) #the smaller one is put at the start of the queueelse:q1.put(x) # the smaller one is put at the start of the queuex = y # the greater one is replaced with x and compared again with nextelementq1.put(x)while (q1.empty() == False):print(q1.queue[0], end = " ")q1.get()
Вихід:
3 4 5 10 11 21
Черга заднім ходом
Щоб змінити чергу, можна скористатися іншою чергою та рекурсією.
Наступний приклад показує, як повернути чергу в іншу сторону.
Приклад:
import queueq1 = queue.Queue()q1.put(11)q1.put(5)q1.put(4)q1.put(21)q1.put(3)q1.put(10)def reverseQueue (q1src, q2dest) :buffer = q1src.get()if (q1src.empty() == False) :reverseQueue(q1src, q2dest) #using recursionq2dest.put(buffer)return q2destq2dest = queue.Queue()qReversed = reverseQueue(q1,q2dest)while (qReversed.empty() == False):print(qReversed.queue[0], end = " ")qReversed.get()
Вихід:
10 3 21 4 5 11
Короткий зміст:
- Черга - це контейнер, що містить дані. Існує два типи черги, FIFO та LIFO.
- Для FIFO (перший у черзі першого виходу) елемент, який іде першим, вийде першим.
- Для LIFO (Останнє в черзі першого виходу) елемент, який введено останнім, вийде першим.
- Елемент у черзі додається методом put (item).
- Для вилучення елемента використовується метод get ().