Шта је Питхон Куеуе?
Ред је контејнер који садржи податке. Подаци који се први унесу прво ће бити уклоњени, па се ред назива и „Прво у првом“ (ФИФО). Ред има два краја напред и позади. Предмети се уносе са задње стране и уклањају са предње стране.
У овом упутству за Питхон научићете:
- Шта је Питхон Куеуе?
- Како функционише Питхон Куеуе?
- Типови реда у Питхону
- Инсталација Питхон реда
- Методе доступне унутар класе Куеуе и ЛифоКуеуе
- Пример првог у првом реду
- Пример последњег у првом излазу
- Додајте више од 1 ставке у ред
- Ред за сортирање
- Реверсинг Куеуе
Како функционише Питхон Куеуе?
Ред се лако може упоредити са примером из стварног света, редом људи који чекају у реду на шалтеру карата, прво ће доћи особа која стоји прва, а затим следећа и тако даље. Иста логика важи и за структуру података о реду.
Ево дијаграмског приказа реда:
Задњи представља тачку у којој су ствари убачена у ред. У овом примеру 7 је вредност за то.
Фронт представља тачку у којој ће се уклонити ставке из реда. Ако уклоните ставку из реда, први елемент који ћете добити је 1, као што је приказано на слици.
Ставка 1 је прва стављена у ред, а док је уклањана прва је изашла. Стога се ред назива ФИРСТ ИН ФИРСТ ОУТ (ФИФО)
У реду се ставке уклањају редом и не могу се уклонити између. Једноставно не можете да уклоните ставку 5 насумично из реда, да бисте то урадили, мораћете да уклоните све ставке пре 5. Ставке у реду ће бити уклоњене по редоследу у којем су уметнуте.
Типови реда у Питхону
У Питхону постоје углавном две врсте редова:
- Прво у реду Први излаз: За ово ће први изаћи елемент који иде први.
Да бисте радили са ФИФО-ом, морате позвати класу Куеуе () из модула реда.
- Последњи у реду за први излаз: Овде ће елемент који је последњи унесен први изаћи.
Да бисте радили са ЛИФО, морате позвати класу ЛифоКуеуе () из модула реда.
Инсталација Питхон реда
Веома је лако радити са редом у питхону. Ево корака које треба следити да бисте користили ред у коду.
Корак 1) Само морате да увезете модул реда, као што је приказано доле:
import queue
Модул је подразумевано доступан са питхон-ом и није вам потребна додатна инсталација да бисте започели рад са редом. Постоје 2 врсте реда ФИФО (први у првом излазу) и ЛИФО (последњи улазећи у први излаз).
Корак 2) Да бисте радили са ФИФО редом, позовите класу Куеуе користећи модул реда увезен као што је приказано доле:
import queueq1 = queue.Queue()
Корак 3) Да бисте радили са ЛИФО редом, позовите класу ЛифоКуеуе () како је приказано доле:
import queueq1 = queue.LifoQueue()
Методе доступне унутар класе Куеуе и ЛифоКуеуе
Следе важне методе доступне у класи Куеуе и ЛифоКуеуе:
- пут (итем): Ово ће ставити ставку у ред.
- гет (): Ово ће вам вратити ставку из реда.
- емпти (): Вратиће труе ако је ред празан и фалсе ако су ставке присутне.
- ксизе (): враћа величину реда.
- фулл (): враћа труе ако је ред пун, иначе фалсе.
Пример првог у првом реду
У случају фирст ин фирст оут, елемент који иде први ће бити први који ће изаћи.
Додајте и ставите у ред
Порадимо на примеру за додавање ставке у ред. Да бисте започели рад са редом, прво увезите ред модула, као што је приказано у примеру испод.
Да бисте додали ставку, можете користити методу пут () као што је приказано у примеру:
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 предмета, а метода к1.фулл () ће вратити труе. Ако додате још ставки, код се неће даље извршавати.
Уклоните ставку из реда
Да бисте уклонили ставку из реда, можете користити методу која се назива гет (). Ова метода омогућава ставке из реда када се позову.
Следећи пример показује како уклонити ставку из реда.
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
Пример последњег у првом излазу
У случају последњег у првом реду чекања, елемент који је последњи унесен биће први који ће изаћи.
Да бисмо радили са ЛИФО, тј. Последњи у првом реду излаза, морамо да увеземо модул реда и да користимо методу ЛифоКуеуе ().
Додајте и ставите у ред
Овде ћемо разумети како додати ставку у ЛИФО ред.
import queueq1 = queue.LifoQueue()q1.put(10)
Морате да користите методу пут () на ЛифоКуеуе, као што је приказано у горњем примеру.
Уклоните ставку из реда
Да бисте уклонили ставку из ЛИФОкуеуе, можете користити методу гет ().
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 ставке у ред
У горњим примерима видели смо како додати једну ставку и уклонити је за ФИФО и ЛИФОкуеуе. Сада ћемо видети како да додамо више ставки и такође га уклонимо.
Додајте и ставите у ФИФОкуеуе
import queueq1 = queue.Queue()for i in range(20):q1.put(i) # this will additem from 0 to 20 to the queue
Уклоните ставку из ФИФОкуеуе
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
Додајте и ставите у ЛИФОкуеуе
import queueq1 = queue.LifoQueue()for i in range(20):q1.put(i) # this will additem from 0 to 20 to the queue
Уклоните ставку из ЛИФОкуеуе
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
Резиме:
- Ред је контејнер који садржи податке. Постоје две врсте реда, ФИФО и ЛИФО.
- За ФИФО (Фирст ин Фирст оут Куеуе), елемент који иде први ће бити први који ће изаћи.
- За ЛИФО (Последњи у реду за први излаз), елемент који је последњи унесен биће први који ће изаћи.
- Ставка у реду се додаје методом пут (итем).
- Да бисте уклонили ставку, користи се метода гет ().