Python Jono: FIFO, LIFO Esimerkki
Mikรค on Python Jonottaa?
Jono on sรคilรถ, joka sisรคltรครค tietoja. Ensin syรถtettรคvรคt tiedot poistetaan ensin, ja siksi jonoa kutsutaan myรถs nimellรค "First in First Out" (FIFO). Jonolla on kaksi pรครคtรค edessรค ja takana. Tavarat syรถtetรครคn sisรครคn takaa ja poistetaan etupuolelta.
Miten Python Jono tyรถ?
Jonoa voidaan helposti verrata tosielรคmรคn esimerkkiin lipputiskillรค jonossa odottavien ihmisten jonoon, ensimmรคisenรค seisova saa lipun ensin, sen jรคlkeen seuraava ja niin edelleen. Sama logiikka pรคtee myรถs jonotietorakenteeseen.
Tรคssรค on kaaviomainen esitys jonosta:
Takaosa edustaa kohtaa, jossa kohteet lisรคtรครคn jonoon. Tรคssรค esimerkissรค 7 on arvo sille.
Etusivu edustaa kohtaa, jossa kohteet jonosta poistetaan. Jos poistat kohteen jonosta, ensimmรคinen elementti, jonka saat, on 1, kuten kuvassa nรคkyy.
Kohde 1 oli ensimmรคinen, joka lisรคttiin jonoon, ja poistettaessa se tulee ensimmรคisenรค ulos. Tรคstรค syystรค jonoa kutsutaan FIFO (FIRST IN FIRST OUT)
Jonossa tuotteet poistetaan jรคrjestyksessรค, eikรค niitรค voi poistaa siltรค vรคliltรค. Kohdetta 5 ei vain voi poistaa satunnaisesti jonosta, vaan sinun on poistettava kaikki tuotteet ennen numeroa 5. Jonossa olevat kohteet poistetaan siinรค jรคrjestyksessรค, jossa ne on lisรคtty.
Jonon tyypit sisรครคn Python
Jonot ovat pรครคasiassa kahdenlaisia Python:
- First in First Out Queue: Tรคtรค varten ensin lรคhtevรค elementti tulee ulos ensimmรคisenรค. Jos haluat tyรถskennellรค FIFO:n kanssa, sinun on kutsuttava Jonottaa() luokka jonomoduulista.
- Last in First out Queue: Tรครคllรค viimeiseksi syรถtetty elementti tulee ulos ensimmรคisenรค. Jos haluat tyรถskennellรค LIFO:n kanssa, sinun on soitettava LifoQueue() luokkaa jonomoduulista.
Python jono Asennus
Pythonissa on erittรคin helppoa tyรถskennellรค jonon kanssa. Tรคssรค on ohjeita, joita sinun on noudatettava kรคyttรครคksesi jonoa koodissasi.
Vaihe 1) Sinun tarvitsee vain tuoda jonomoduuli alla olevan kuvan mukaisesti:
import queue
Moduuli on oletuksena saatavilla pythonin kanssa, etkรค tarvitse lisรคasennusta aloittaaksesi tyรถskentelyn jonon kanssa. Jonoja on kahta tyyppiรค FIFO (first in first out) ja LIFO (viimeinen sisรครคn ensin ulos).
Vaihe 2) Jos haluat tyรถskennellรค FIFO-jonon kanssa, kutsu Queue-luokka kรคyttรคmรคllรค jonomoduulia, joka on tuotu alla olevan kuvan mukaisesti:
import queue q1 = queue.Queue()
Vaihe 3) Tyรถskentele LIFO-jonon kanssa kutsumalla LifoQueue()-luokkaa alla olevan kuvan mukaisesti:
import queue q1 = queue.LifoQueue()
Menetelmรคt ovat kรคytettรคvissรค Queue- ja LifoQueue-luokissa
Seuraavat ovat tรคrkeรคt menetelmรคt, jotka ovat kรคytettรคvissรค Queue- ja LifoQueue-luokissa:
- laittaa(tuote): Tรคmรค asettaa kohteen jonoon.
- saada(): Tรคmรค palauttaa sinulle tuotteen jonosta.
- tyhjรค(): Se palauttaa arvon tosi, jos jono on tyhjรค, ja epรคtosi, jos kohteita on.
- qsize(): palauttaa jonon koon.
- koko(): palauttaa arvon tosi, jos jono on tรคynnรค, muuten false.
Esimerkki First In First Out -jonosta
Jos kyseessรค on ensimmรคinen sisรครคn ensimmรคinen ulos, ensimmรคisenรค lรคhtevรค elementti tulee ulos ensimmรคisenรค.
Lisรครค ja tuote jonossa
Tyรถstetรครคn esimerkkiรค kohteen lisรครคmiseksi jonoon. Aloita tyรถskentely jonon kanssa tuomalla ensin moduulijono alla olevan esimerkin mukaisesti.
Voit lisรคtรค kohteen kรคyttรคmรคllรค put()-menetelmรครค esimerkin mukaisesti:
import queue q1 = queue.Queue() q1.put(10) #this will additem 10 to the queue.
Oletusarvoisesti jonon koko on รครคretรถn ja voit lisรคtรค siihen minkรค tahansa mรครคrรคn kohteita. Jos haluat mรครคrittรครค jonon koon, voit tehdรค saman seuraavasti
import queue q1 = 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.
lรคhtรถ:
True
Nyt jonon koko on 5, eikรค se vie enempรครค kuin 5 kohdetta, ja menetelmรค q1.full() palauttaa tosi. Kohteiden lisรครคminen ei suorita koodia enรครค.
Poista kohde jonosta
Voit poistaa kohteen jonosta menetelmรคllรค get(). Tรคmรค menetelmรค sallii kohteet jonosta kutsuttaessa.
Seuraava esimerkki nรคyttรครค, kuinka kohde poistetaan jonosta.
import queue
q1 = queue.Queue()
q1.put(10)
item1 = q1.get()
print('The item removed from the queue is ', item1)
lรคhtรถ:
The item removed from the queue is 10
Esimerkki Last In First Out -jonosta
Kun kyseessรค on viimeinen ensimmรคisenรค ulos -jonossa, viimeisenรค syรถtetty elementti tulee ulos ensimmรคisenรค.
Jotta voisimme tyรถskennellรค LIFO:n kanssa, eli olla viimeisenรค ensimmรคisessรค ulostulojonossa, meidรคn on tuotava jonomoduuli ja kรคytettรคvรค LifoQueue()-menetelmรครค.
Lisรครค ja tuote jonossa
Tรครคllรค ymmรคrrรคmme kuinka lisรคtรค kohde LIFO-jonoon.
import queue q1 = queue.LifoQueue() q1.put(10)
Sinun on kรคytettรคvรค put()-metodia LifoQueuessa, kuten yllรค olevassa esimerkissรค nรคkyy.
Poista kohde jonosta
Voit poistaa kohteen LIFO-jonosta kรคyttรคmรคllรค get() -menetelmรครค .
import queue
q1 = queue.LifoQueue()
q1.put(10)
item1 = q1.get()
print('The item removed from the LIFO queue is ', item1)
lรคhtรถ:
The item removed from the LIFO queue is 10
Lisรครค enemmรคn kuin yksi kohde jonoon
Yllรค olevissa esimerkeissรค olemme nรคhneet kuinka lisรคtรค yksi kohde ja poistaa kohde FIFO- ja LIFOqueue-kohdissa. Nyt nรคemme kuinka lisรคtรค useampi kuin yksi kohde ja myรถs poistaa se.
Lisรครค ja kohde FIFO-jonoon
import queue
q1 = queue.Queue()
for i in range(20):
q1.put(i) # this will additem from 0 to 20 to the queue
Poista kohde FIFO-jonosta
import queue
q1 = queue.Queue()
for i in range(20):
q1.put(i) # this will additem from 0 to 20 to the queue
while not q1.empty():
print("The value is ", q1.get()) # get() will remove the item from the queue.
lรคhtรถ:
The value is 0 The value is 1 The value is 2 The value is 3 The value is 4 The value is 5 The value is 6 The value is 7 The value is 8 The value is 9 The value is 10 The value is 11 The value is 12 The value is 13 The value is 14 The value is 15 The value is 16 The value is 17 The value is 18 The value is 19
Lisรครค ja kohde LIFO-jonoon
import queue
q1 = queue.LifoQueue()
for i in range(20):
q1.put(i) # this will additem from 0 to 20 to the queue
Poista kohde LIFO-jonosta
import queue
q1 = queue.LifoQueue()
for i in range(20):
q1.put(i) # this will additem from 0 to 20 to the queue
while not q1.empty():
print("The value is ", q1.get()) # get() will remove the item from the queue.
lรคhtรถ:
The value is 19 The value is 18 The value is 17 The value is 16 The value is 15 The value is 14 The value is 13 The value is 12 The value is 11 The value is 10 The value is 9 The value is 8 The value is 7 The value is 6 The value is 5 The value is 4 The value is 3 The value is 2 The value is 1 The value is 0
Lajittelujono
Seuraava esimerkki nรคyttรครค jonojen lajittelun. Lajittelussa kรคytetty algoritmi on kuplalajittelu.
import queue
q1 = queue.Queue()
#Addingitems to the queue
q1.put(11)
q1.put(5)
q1.put(4)
q1.put(21)
q1.put(3)
q1.put(10)
#using bubble sort on the queue
n = q1.qsize()
for i in range(n):
x = q1.get() # the element is removed
for j in range(n-1):
y = q1.get() # the element is removed
if x > y :
q1.put(y) #the smaller one is put at the start of the queue
else:
q1.put(x) # the smaller one is put at the start of the queue
x = y # the greater one is replaced with x and compared again with nextelement
q1.put(x)
while (q1.empty() == False):
print(q1.queue[0], end = " ")
q1.get()
lรคhtรถ:
3 4 5 10 11 21
Reversing-jono
Kรครคntรครคksesi jonon, voit kรคyttรครค toista jonoa ja rekursiota.
Seuraava esimerkki nรคyttรครค kuinka saada jono kรครคnteiseksi.
Esimerkiksi:
import queue
q1 = 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 recursion
q2dest.put(buffer)
return q2dest
q2dest = queue.Queue()
qReversed = reverseQueue(q1,q2dest)
while (qReversed.empty() == False):
print(qReversed.queue[0], end = " ")
qReversed.get()
lรคhtรถ:
10 3 21 4 5 11
Yhteenveto
- Jono on sรคilรถ, joka sisรคltรครค tietoja. Jonoja on kahta tyyppiรค, FIFO ja LIFO.
- FIFO:ssa (First in First out Queue) ensimmรคisenรค lรคhtevรค elementti tulee ulos ensimmรคisenรค.
- LIFO (Last in First out Queue) -jonossa viimeisenรค syรถtetty elementti tulee ulos ensimmรคisenรค.
- Jonossa oleva nimike lisรคtรครคn put(item)-menetelmรคllรค.
- Kohteen poistamiseen kรคytetรครคn get()-menetelmรครค.


