Python Fronta: FIFO, LIFO Příklad

Co je to Python Fronta?

Fronta je kontejner, který obsahuje data. Data, která zadáte jako první, budou odstraněna jako první, a proto se fronta také nazývá „First in First Out“ (FIFO). Fronta má dva konce vpředu a vzadu. Položky se zadávají zezadu a vyjímají z přední strany.

Jak se dělá Python Práce ve frontě?

Frontu lze snadno porovnat s reálným příkladem fronty lidí čekajících ve frontě u pokladní přepážky, první dostane lístek ten, kdo stojí jako první, následuje další a tak dále. Stejná logika platí i pro datovou strukturu fronty.

Zde je schématické znázornění fronty:

Python Práce ve frontě

Jedno Zadní představuje bod, kde jsou položky vloženy do fronty. V tomto příkladu je pro to hodnota 7.

Jedno Přední představuje bod, kde budou položky z fronty odstraněny. Pokud odeberete položku z fronty, první prvek, který získáte, je 1, jak je znázorněno na obrázku.

Položka 1 byla první, která byla vložena do fronty, a při odstraňování je první, která vyšla. Proto se fronta nazývá FIRST IN FIRST OUT (FIFO)

Python Práce ve frontě

Ve frontě jsou položky odebírány v pořadí a nelze je odstraňovat mezitím. Položku 5 prostě nemůžete odstranit náhodně z fronty, k tomu budete muset odstranit všechny položky před 5. Položky ve frontě budou odstraněny v pořadí, v jakém byly vloženy.

Typy fronty v Python

Existují hlavně dva typy fronty Python:

  • First in First out Queue: Za tímto účelem prvek, který jde jako první, vyjde jako první. Chcete-li pracovat s FIFO, musíte zavolat Fronta() třídy z modulu fronty.
  • Last in First Out Queue: Zde prvek, který je zadán jako poslední, vyjde jako první. Chcete-li pracovat s LIFO, musíte zavolat LifoQueue() třídy z modulu fronty.

Python instalace fronty

V pythonu je velmi snadné pracovat s frontou. Zde jsou kroky, které je třeba dodržet, abyste mohli ve svém kódu použít frontu.

Krok 1) Stačí importovat modul fronty, jak je znázorněno níže:

import queue

Modul je standardně dostupný s pythonem a nepotřebujete žádnou další instalaci, abyste mohli začít pracovat s frontou. Existují 2 typy fronty FIFO (první dovnitř první ven) a LIFO (poslední dovnitř první ven).

Krok 2) Chcete-li pracovat s FIFO queue , zavolejte třídu Queue pomocí modulu fronty importovaného, ​​jak je uvedeno níže:

import queue
q1 = queue.Queue()

Krok 3) Chcete-li pracovat s frontou LIFO, zavolejte třídu LifoQueue(), jak je uvedeno níže:

import queue
q1 = queue.LifoQueue()

Metody dostupné ve třídě Queue a LifoQueue

Níže jsou uvedeny důležité metody dostupné ve třídě Queue a LifoQueue:

  • vložit (položka): Tím se položka zařadí do fronty.
  • dostat(): Tím se vám vrátí položka z fronty.
  • prázdný(): Vrátí true, pokud je fronta prázdná, a false, pokud jsou přítomny položky.
  • qsize(): vrátí velikost fronty.
  • plný(): vrátí true, je-li fronta plná, jinak false.

První do první z fronty Příklad

V případě první dovnitř, první ven, prvek, který jde jako první, vyjde jako první.

Přidat a položku ve frontě

Pojďme pracovat na příkladu přidání položky do fronty. Chcete-li začít pracovat s frontou, nejprve importujte frontu modulů, jak je znázorněno v příkladu níže.

Chcete-li přidat položku, můžete použít metodu put(), jak je znázorněno v příkladu:

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

Ve výchozím nastavení je velikost fronty nekonečná a můžete do ní přidat libovolný počet položek. V případě, že chcete definovat velikost fronty, totéž lze provést následovně

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.

Výstup:

True

Nyní je velikost fronty 5 a nezabere více než 5 položek a metoda q1.full() vrátí hodnotu true. Přidáním dalších položek se kód dále nespustí.

Odebrat položku z fronty

Chcete-li odstranit položku z fronty, můžete použít metodu nazvanou get(). Tato metoda umožňuje při volání položky z fronty.

Následující příklad ukazuje, jak odebrat položku z fronty.

import queue
q1 = queue.Queue()
q1.put(10)

item1 = q1.get()

print('The item removed from the queue is ', item1)

Výstup:

The item removed from the queue is  10

Příklad fronty Last In First Out

V případě posledního ve frontě první, prvek, který je zadán jako poslední, vyjde jako první.

Abychom mohli pracovat s LIFO, tj. jako poslední v první výstupní frontě, musíme importovat modul fronty a použít metodu LifoQueue().

Přidat a položku ve frontě

Zde pochopíme, jak přidat položku do fronty LIFO.

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

Na LifoQueue musíte použít metodu put(), jak je ukázáno ve výše uvedeném příkladu.

Odebrat položku z fronty

Chcete-li odstranit položku z fronty LIFO, můžete použít metodu get() .

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

item1 = q1.get()

print('The item removed from the LIFO queue is ', item1)

Výstup:

The item removed from the LIFO queue is  10

Přidejte více než 1 položku do fronty

Ve výše uvedených příkladech jsme viděli, jak přidat jednu položku a odebrat položku pro FIFO a LIFOqueue. Nyní uvidíme, jak přidat více než jednu položku a také ji odebrat.

Přidat a položku ve frontě FIFO

import queue
q1 = queue.Queue()

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

Odeberte položku z fronty FIFO

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.

Výstup:

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

Přidat a položku ve frontě LIFO

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

Odeberte položku z fronty LIFO

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.

Výstup:

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 

Fronta řazení

Následující příklad ukazuje řazení ve frontě. Algoritmus používaný pro řazení je bublinové řazení.

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

Výstup:

3 4 5 10 11 21

Reversing Queue

Chcete-li frontu obrátit, můžete použít jinou frontu a rekurzi.

Následující příklad ukazuje, jak dosáhnout obrácení fronty.

Příklad:

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

Výstup:

10 3 21 4 5 11

Shrnutí

  • Fronta je kontejner, který obsahuje data. Existují dva typy fronty, FIFO a LIFO.
  • V případě FIFO (First in First Out Queue) prvek, který jde jako první, vyjde jako první.
  • U LIFO (Last in First Out Queue) prvek, který je zadán jako poslední, vyjde jako první.
  • Položka ve frontě je přidána pomocí metody put(item).
  • K odstranění položky se používá metoda get().