Kaj je čakalna vrsta Python?
Čakalna vrsta je vsebnik, ki vsebuje podatke. Podatki, ki so bili vneseni prvi, bodo najprej odstranjeni, zato se vrsta imenuje tudi "First in First Out" (FIFO). Čakalna vrsta ima dva konca spredaj in zadaj. Predmeti se vstopajo od zadaj in odstranijo s sprednje strani.
V tej vadnici za Python boste izvedeli:
- Kaj je čakalna vrsta Python?
- Kako deluje čakalna vrsta Python?
- Vrste čakalne vrste v Pythonu
- Namestitev čakalne vrste Python
- Metode, ki so na voljo znotraj razreda Queue in LifoQueue
- Primer prvi v prvi vrsti
- Primer čakalne vrste Last In First Out
- V čakalno vrsto dodajte več kot 1 element
- Čakalna vrsta za razvrščanje
- Vzvratna čakalna vrsta
Kako deluje čakalna vrsta Python?
Čakalno vrsto je mogoče enostavno primerjati z resničnim primerom vrste ljudi, ki čakajo v čakalni vrsti pri okencu za prodajo vstopnic, najprej bo dobil voznik, ki bo stal prvi, sledil bo naslednji in tako naprej. Ista logika velja tudi za strukturo podatkov čakalne vrste.
Tu je shematski prikaz čakalne vrste:
Zadaj predstavlja točko, kjer se blago vgrajena v vrsti. V tem primeru je 7 vrednost za to.
Sprednji predstavlja točko, kjer se bodo izdelki iz vrste odstrani. Če element odstranite iz čakalne vrste, je prvi element, ki ga dobite, 1, kot je prikazano na sliki.
Točka 1 je bila prva, ki je bila vstavljena v čakalno vrsto, med odstranjevanjem pa je prva, ki je prišla ven. Zato se vrsta imenuje FIRST IN FIRST OUT (FIFO)
V čakalni vrsti se elementi odstranijo po vrsti in jih ni mogoče odstraniti vmes. Elementa 5 preprosto ne morete naključno odstraniti iz čakalne vrste, zato boste morali vse elemente odstraniti pred 5. Elementi v čakalni vrsti bodo odstranjeni v vrstnem redu, kot so vstavljeni.
Vrste čakalne vrste v Pythonu
V Pythonu sta v glavnem dve vrsti čakalne vrste:
- Prvi v čakalni vrsti First out: Za to bo element, ki gre prvi, prvi izstopil.
Če želite delati s sistemom FIFO, morate iz modula čakalne vrste poklicati razred Queue () .
- Nazadnje v čakalni vrsti First out: Tu bo element, ki je vpisan zadnji, prvi izstopil.
Če želite delati z LIFO, morate iz modula čakalne vrste poklicati razred LifoQueue () .
Namestitev čakalne vrste Python
Delo s čakalno vrsto v pythonu je zelo enostavno. Tu so koraki za uporabo čakalne vrste v kodi.
Korak 1) Uvoziti morate le modul čakalne vrste, kot je prikazano spodaj:
import queue
Modul je privzeto na voljo s pythonom in za začetek dela s čakalno vrsto ne potrebujete dodatne namestitve. Obstajata 2 vrsti čakalne vrste FIFO (prvi v prvem izhodu) in LIFO (zadnji v prvem izhodu).
Korak 2) Če želite delati s čakalno vrsto FIFO, pokličite razred Queue z uporabo uvoženega modula čakalne vrste, kot je prikazano spodaj:
import queueq1 = queue.Queue()
Korak 3) Za delo s čakalno vrsto LIFO pokličite razred LifoQueue (), kot je prikazano spodaj:
import queueq1 = queue.LifoQueue()
Metode, ki so na voljo znotraj razreda Queue in LifoQueue
Sledijo pomembne metode, ki so na voljo znotraj razreda Queue in LifoQueue:
- put (item): s tem bo element postavljen v čakalno vrsto.
- get (): To vam bo vrnilo element iz čakalne vrste.
- empty (): Vrnil bo true, če je vrsta prazna in false, če so prisotni predmeti.
- qsize (): vrne velikost čakalne vrste.
- full (): vrne true, če je vrsta polna, sicer false.
Primer prvi v prvi vrsti
V primeru, da je prvi vstop prvi, bo element, ki gre prvi, prvi izstopil.
Dodaj in postavi v čakalno vrsto
Delajmo na primeru za dodajanje elementa v čakalno vrsto. Če želite začeti delati s čakalno vrsto, najprej uvozite čakalno vrsto modula, kot je prikazano v spodnjem primeru.
Če želite dodati element, lahko uporabite metodo put (), kot je prikazano v primeru:
import queueq1 = queue.Queue()q1.put(10) #this will additem 10 to the queue.
Velikost čakalne vrste je privzeto neskončna in vanjo lahko dodate poljubno število elementov. Če želite določiti velikost čakalne vrste, lahko to storite na naslednji 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.
Izhod:
True
Zdaj je velikost čakalne vrste 5 in ne bo trajalo več kot 5 elementov, metoda q1.full () pa bo vrnila true. Če dodate več elementov, se koda ne bo več izvajala.
Odstranite element iz čakalne vrste
Če želite element odstraniti iz čakalne vrste, lahko uporabite metodo, imenovano get (). Ta metoda omogoča predmete iz čakalne vrste, ko jih pokličete.
Naslednji primer prikazuje, kako odstraniti element iz čakalne vrste.
import queueq1 = queue.Queue()q1.put(10)item1 = q1.get()print('The item removed from the queue is ', item1)
Izhod:
The item removed from the queue is 10
Primer čakalne vrste Last In First Out
V primeru zadnjega v prvi čakalni vrsti bo element, ki je vpisan zadnji, prvi izstopil.
Če želite delati z LIFO, tj. Nazadnje v prvi izhodni vrsti, moramo uvoziti modul čakalne vrste in uporabiti metodo LifoQueue ().
Dodaj in postavi v čakalno vrsto
Tu bomo razumeli, kako dodati element v čakalno vrsto LIFO.
import queueq1 = queue.LifoQueue()q1.put(10)
V LifoQueue morate uporabiti metodo put (), kot je prikazano v zgornjem primeru.
Odstranite element iz čakalne vrste
Če želite element odstraniti iz čakalne vrste LIFOque, lahko uporabite metodo get ().
import queueq1 = queue.LifoQueue()q1.put(10)item1 = q1.get()print('The item removed from the LIFO queue is ', item1)
Izhod:
The item removed from the LIFO queue is 10
V čakalno vrsto dodajte več kot 1 element
V zgornjih primerih smo videli, kako dodati en element in odstraniti element za FIFO in LIFOqueue. Zdaj bomo videli, kako dodati več elementov in ga tudi odstraniti.
Dodajte in postavite v čakalno vrsto FIFO
import queueq1 = queue.Queue()for i in range(20):q1.put(i) # this will additem from 0 to 20 to the queue
Odstranite element iz vrste 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.
Izhod:
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 in postavite v čakalno vrsto LIFO
import queueq1 = queue.LifoQueue()for i in range(20):q1.put(i) # this will additem from 0 to 20 to the queue
Odstranite element iz čakalne vrste 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.
Izhod:
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
Čakalna vrsta za razvrščanje
Naslednji primer prikazuje razvrščanje v čakalni vrsti. Algoritem, uporabljen za razvrščanje, je razvrščanje z mehurčki.
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()
Izhod:
3 4 5 10 11 21
Vzvratna čakalna vrsta
Če želite obrniti čakalno vrsto, lahko uporabite drugo vrsto in rekurzijo.
Naslednji primer prikazuje, kako obrniti čakalno vrsto.
Primer:
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()
Izhod:
10 3 21 4 5 11
Povzetek:
- Čakalna vrsta je vsebnik, ki vsebuje podatke. Obstajata dve vrsti čakalne vrste, FIFO in LIFO.
- Za FIFO (First in First out Queue) bo element, ki gre prvi, prvi izstopil.
- Za LIFO (Zadnji v čakalni vrsti za prvi odhod) bo element, ki je vnesen zadnji, prvi, ki bo izstopil.
- Element v čakalni vrsti se doda z uporabo metode put (item).
- Za odstranitev predmeta se uporablja metoda get ().