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:

Python Jonotรถitรค

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)

Python Jonotรถitรค

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รครค.

Tiivistรค tรคmรค viesti seuraavasti: