Red čekanja Pythona: Primjer FIFO, LIFO

Sadržaj:

Anonim

Što je Python Queue?

Red čekanja je spremnik koji sadrži podatke. Podaci koji se prvi unesu prvo će se ukloniti, pa se red naziva i "Prvo u prvom" (FIFO). Red čekanja ima dva kraja sprijeda i straga. Predmeti se ulaze sa stražnje strane i uklanjaju s prednje strane.

U ovom vodiču za Python naučit ćete:

  • Što je Python Queue?
  • Kako Python Queue funkcionira?
  • Vrste reda u Pythonu
  • Instalacija Python reda
  • Metode dostupne unutar klase Queue i LifoQueue
  • Primjer prvog u prvom redu čekanja
  • Primjer reda „Posljednje u prvom izlazu“
  • Dodajte više od 1 stavke u red čekanja
  • Red za sortiranje
  • Red za vožnju unatrag

Kako Python Queue funkcionira?

Red se lako može usporediti sa stvarnim primjerom, red ljudi koji čekaju u redu na šalteru karata, prva će dobiti osoba koja stoji prva, a zatim slijedeća i tako dalje. Ista logika vrijedi i za strukturu podataka o redu čekanja.

Evo dijagramskog prikaza reda:

Stražnji predstavlja mjesto na kojem su predmeti umetnuta u redu. U ovom primjeru 7 je vrijednost za to.

Prednji predstavlja mjesto na kojem će biti uklonjeni predmeti iz red. Ako uklonite stavku iz reda, prvi element koji ćete dobiti je 1, kao što je prikazano na slici.

Stavka 1 prva je umetnuta u red, a dok je uklanjana prva je izašla. Stoga se red naziva FIRST IN FIRST OUT (FIFO)

U redu čekanja stavke se uklanjaju redom i ne mogu se ukloniti između. Jednostavno ne možete slučajno ukloniti stavku 5 iz reda, a za to ćete morati ukloniti sve stavke prije 5. Stavke u redu uklonit će se redoslijedom u kojem su umetnute.

Vrste reda u Pythonu

U Pythonu postoje uglavnom dvije vrste reda:

  • Prvo u Redu prvog izlaza: prvi će izaći element koji ide prvi.

    Da biste radili s FIFO-om, morate pozvati klasu Queue () iz modula reda.

  • Posljednji u Redu prvog izlaza: Ovdje će element koji je posljednji put uveden prvi izaći.

    Da biste radili s LIFO-om, morate pozvati klasu LifoQueue () iz modula reda.

Instalacija Python reda

Vrlo je lako raditi s redom u pythonu. Evo koraka koje trebate slijediti kako biste iskoristili red u kodu.

Korak 1) Samo morate uvesti modul reda, kao što je prikazano dolje:

import queue

Modul je prema zadanim postavkama dostupan s pythonom i nije vam potrebna dodatna instalacija da biste započeli raditi s redom. Postoje 2 vrste reda FIFO (prvi ulaz prvi izlaz) i LIFO (zadnji ulaz prvi izlaz).

Korak 2) Da biste radili s FIFO redom, pozovite klasu Queue pomoću modula reda uvezenog kao što je prikazano u nastavku:

import queueq1 = queue.Queue()

Korak 3) Za rad s LIFO redom pozovite klasu LifoQueue () kako je prikazano u nastavku:

import queueq1 = queue.LifoQueue()

Metode dostupne unutar klase Queue i LifoQueue

Slijede važne metode dostupne unutar klase Queue i LifoQueue:

  • put (item): Ovo će stavku staviti u red čekanja.
  • get (): Ovo će vam vratiti stavku iz reda.
  • empty (): Vratit će true ako je red prazan i false ako su stavke prisutne.
  • qsize (): vraća veličinu reda.
  • full (): vraća true ako je red pun, inače false.

Primjer prvog u prvom redu čekanja

U slučaju first in first out, element koji krene prvi bit će prvi koji će izaći.

Dodajte i stavite u red čekanja

Poradimo na primjeru za dodavanje stavke u red čekanja. Da biste započeli rad s redom, prvo uvezite red modula, kao što je prikazano u donjem primjeru.

Da biste dodali stavku, možete upotrijebiti put () metodu kao što je prikazano u primjeru:

import queueq1 = queue.Queue()q1.put(10) #this will additem 10 to the queue.

Prema zadanim postavkama, veličina reda je beskonačna i možete joj dodati bilo koji broj stavki. U slučaju da želite definirati veličinu reda, to se može učiniti na sljedeći način

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.

Izlaz:

True

Sada je veličina reda 5 i neće trebati više od 5 predmeta, a metoda q1.full () vratit će true. Dodavanjem bilo kojih stavki neće se dalje izvršavati kôd.

Uklonite stavku iz reda

Da biste uklonili stavku iz reda, možete upotrijebiti metodu koja se naziva get (). Ova metoda omogućuje pozive stavki iz reda.

Sljedeći primjer pokazuje kako ukloniti stavku iz reda čekanja.

import queueq1 = queue.Queue()q1.put(10)item1 = q1.get()print('The item removed from the queue is ', item1)

Izlaz:

The item removed from the queue is 10

Primjer reda „Posljednje u prvom izlazu“

U slučaju zadnjeg u prvom redu čekanja, prvi će izaći element koji je zadnji unesen.

Da bismo radili s LIFO, tj. Zadnji u prvom redu čekanja, moramo uvesti modul reda i koristiti metodu LifoQueue ().

Dodajte i stavite u red čekanja

Ovdje ćemo razumjeti kako dodati stavku u LIFO red.

import queueq1 = queue.LifoQueue()q1.put(10)

Morate koristiti metodu put () na LifoQueue, kao što je prikazano u gornjem primjeru.

Uklonite stavku iz reda

Da biste uklonili stavku iz LIFOqueue, možete koristiti metodu get ().

import queueq1 = queue.LifoQueue()q1.put(10)item1 = q1.get()print('The item removed from the LIFO queue is ', item1)

Izlaz:

The item removed from the LIFO queue is 10

Dodajte više od 1 stavke u red čekanja

U gornjim primjerima vidjeli smo kako dodati jednu stavku i ukloniti je za FIFO i LIFOqueue. Sada ćemo vidjeti kako dodati više stavki i također ga ukloniti.

Dodajte i stavite u FIFOqueue

import queueq1 = queue.Queue()for i in range(20):q1.put(i) # this will additem from 0 to 20 to the queue

Uklonite stavku iz FIFOqueue

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.

Izlaz:

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

Dodajte i stavite u LIFOqueue

import queueq1 = queue.LifoQueue()for i in range(20):q1.put(i) # this will additem from 0 to 20 to the queue

Uklonite stavku iz LIFOqueue

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. 

Izlaz:

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

Red za sortiranje

Sljedeći primjer prikazuje sortiranje u redu. Algoritam koji se koristi za sortiranje je mjehurićasto sortiranje.

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()

Izlaz:

3 4 5 10 11 21

Red za vožnju unatrag

Da biste preokrenuli red, možete koristiti drugi red i rekurziju.

Sljedeći primjer pokazuje kako preokrenuti red.

Primjer:

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()

Izlaz:

10 3 21 4 5 11

Sažetak:

  • Red čekanja je spremnik koji sadrži podatke. Postoje dvije vrste reda čekanja, FIFO i LIFO.
  • Za FIFO (First in First out Queue) element koji krene prvi bit će prvi koji će izaći.
  • Za LIFO (Zadnji u redu za prvi izlaz), element koji je posljednji put uveden bit će prvi koji će izaći.
  • Stavka u redu dodaje se metodom put (item).
  • Za uklanjanje stavke koristi se metoda get ().