Co to jest kolejka Pythona?
Kolejka to kontener przechowujący dane. Dane wprowadzone jako pierwsze zostaną usunięte jako pierwsze, dlatego kolejka jest również nazywana „First in First Out” (FIFO). Kolejka ma dwa końce z przodu iz tyłu. Przedmioty są wprowadzane od tyłu i wyjmowane z przodu.
W tym samouczku Python dowiesz się:
- Co to jest kolejka Pythona?
- Jak działa kolejka Pythona?
- Typy kolejek w Pythonie
- Instalacja kolejki Pythona
- Metody dostępne w klasie Queue i LifoQueue
- Przykład kolejki pierwsze weszło pierwsze wyszło
- Przykład kolejki Last In First Out
- Dodaj więcej niż 1 element do kolejki
- Kolejka sortowania
- Kolejka cofania
Jak działa kolejka Pythona?
Kolejkę można łatwo porównać z rzeczywistym przykładem kolejki osób czekających w kolejce przy kasie biletowej, osoba stojąca pierwsza otrzyma bilet jako pierwsza, a następnie następna i tak dalej. Ta sama logika dotyczy również struktury danych kolejki.
Oto schematyczne przedstawienie kolejki:
Tylny oznacza punkt, w którym elementy są wstawione wewnątrz kolejki. W tym przykładzie 7 to wartość.
Przednia stanowi punkt, w którym zostaną usunięte elementy z kolejki. Jeśli usuniesz element z kolejki, pierwszym otrzymanym elementem będzie 1, jak pokazano na rysunku.
Pozycja 1 jako pierwsza została wstawiona do kolejki, a usuwając jako pierwsza wyszła. Stąd kolejka nazywa się FIRST IN FIRST OUT (FIFO)
W kolejce elementy są usuwane w kolejności i nie można ich usunąć pomiędzy. Po prostu nie możesz losowo usunąć pozycji 5 z kolejki, aby to zrobić, będziesz musiał usunąć wszystkie pozycje przed 5. Pozycje w kolejce zostaną usunięte w kolejności, w jakiej zostały wstawione.
Typy kolejek w Pythonie
W Pythonie istnieją głównie dwa typy kolejek:
- Pierwszy w kolejce pierwszy wyszedł: w tym przypadku element, który będzie pierwszy, zostanie wyświetlony jako pierwszy.
Aby pracować z FIFO, musisz wywołać klasę Queue () z modułu queue.
- Ostatnia w kolejce, pierwsze wyszło: Tutaj element, który zostanie wprowadzony jako ostatni, będzie pierwszy.
Aby pracować z LIFO, musisz wywołać klasę LifoQueue () z modułu kolejki.
Instalacja kolejki Pythona
Praca z kolejką w Pythonie jest bardzo łatwa. Oto kroki, które należy wykonać, aby użyć kolejki w kodzie.
Krok 1) Wystarczy zaimportować moduł kolejki, jak pokazano poniżej:
import queue
Moduł jest dostępny domyślnie w pythonie i nie potrzebujesz żadnej dodatkowej instalacji, aby rozpocząć pracę z kolejką. Istnieją 2 typy kolejki FIFO (pierwsze weszło, pierwsze wyszło) i LIFO (ostatnie weszło, pierwsze wyszło).
Krok 2) Aby pracować z kolejką FIFO, wywołaj klasę Queue za pomocą zaimportowanego modułu kolejki, jak pokazano poniżej:
import queueq1 = queue.Queue()
Krok 3) Aby pracować z kolejką LIFO, wywołaj klasę LifoQueue (), jak pokazano poniżej:
import queueq1 = queue.LifoQueue()
Metody dostępne w klasie Queue i LifoQueue
Poniżej przedstawiono ważne metody dostępne w klasie Queue i LifoQueue:
- put (item): Spowoduje to umieszczenie elementu w kolejce.
- get (): To zwróci element z kolejki.
- empty (): Zwróci true, jeśli kolejka jest pusta i false, jeśli obecne są elementy.
- qsize (): zwraca rozmiar kolejki.
- full (): zwraca true, jeśli kolejka jest pełna, w przeciwnym razie false.
Przykład kolejki pierwsze weszło pierwsze wyszło
W przypadku pierwszego weszło, pierwsze wyszło, element, który idzie pierwszy, wyjdzie jako pierwszy.
Dodaj i element w kolejce
Popracujmy na przykładzie dodawania pozycji do kolejki. Aby rozpocząć pracę z kolejką, najpierw zaimportuj kolejkę modułów, jak pokazano w poniższym przykładzie.
Aby dodać element, możesz skorzystać z metody put (), jak pokazano w przykładzie:
import queueq1 = queue.Queue()q1.put(10) #this will additem 10 to the queue.
Domyślnie rozmiar kolejki jest nieskończony i możesz dodać do niej dowolną liczbę pozycji. Jeśli chcesz zdefiniować rozmiar kolejki, możesz zrobić to samo w następujący sposób
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.
Wynik:
True
Teraz kolejka ma rozmiar 5 i nie zajmie więcej niż 5 pozycji, a metoda q1.full () zwróci wartość true. Dodanie kolejnych elementów nie spowoduje dalszego wykonywania kodu.
Usuń element z kolejki
Aby usunąć element z kolejki, możesz użyć metody o nazwie get (). Ta metoda zezwala na elementy z kolejki po wywołaniu.
Poniższy przykład pokazuje, jak usunąć element z kolejki.
import queueq1 = queue.Queue()q1.put(10)item1 = q1.get()print('The item removed from the queue is ', item1)
Wynik:
The item removed from the queue is 10
Przykład kolejki Last In First Out
W przypadku ostatniego w pierwszej kolejce na wyjściu, element, który zostanie wprowadzony jako ostatni, wyjdzie jako pierwszy.
Aby pracować z LIFO, czyli ostatnią w pierwszej kolejce wyjściowej, musimy zaimportować moduł kolejki i skorzystać z metody LifoQueue ().
Dodaj i element w kolejce
Tutaj zrozumiemy, jak dodać element do kolejki LIFO.
import queueq1 = queue.LifoQueue()q1.put(10)
Musisz użyć metody put () w LifoQueue, jak pokazano w powyższym przykładzie.
Usuń element z kolejki
Aby usunąć element z LIFOqueue, możesz skorzystać z metody get ().
import queueq1 = queue.LifoQueue()q1.put(10)item1 = q1.get()print('The item removed from the LIFO queue is ', item1)
Wynik:
The item removed from the LIFO queue is 10
Dodaj więcej niż 1 element do kolejki
W powyższych przykładach widzieliśmy, jak dodać pojedynczy element i usunąć go dla FIFO i LIFOqueue. Teraz zobaczymy, jak dodać więcej niż jeden element, a także go usunąć.
Dodaj i element w FIFOqueue
import queueq1 = queue.Queue()for i in range(20):q1.put(i) # this will additem from 0 to 20 to the queue
Usuń element z 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.
Wynik:
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
Dodaj i element w LIFOqueue
import queueq1 = queue.LifoQueue()for i in range(20):q1.put(i) # this will additem from 0 to 20 to the queue
Usuń element z 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.
Wynik:
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
Kolejka sortowania
Poniższy przykład przedstawia sortowanie kolejki. Algorytmem używanym do sortowania jest sortowanie bąbelkowe.
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()
Wynik:
3 4 5 10 11 21
Kolejka cofania
Aby odwrócić kolejkę, możesz skorzystać z innej kolejki i rekursji.
Poniższy przykład pokazuje, jak odwrócić kolejkę.
Przykład:
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()
Wynik:
10 3 21 4 5 11
Podsumowanie:
- Kolejka to kontener przechowujący dane. Istnieją dwa typy kolejki, FIFO i LIFO.
- W przypadku FIFO (First in First Out Queue) element, który jest pierwszy, będzie pierwszy.
- W przypadku LIFO (kolejka Last in First Out) element wprowadzony jako ostatni będzie wychodził jako pierwszy.
- Pozycja w kolejce jest dodawana za pomocą metody put (item).
- Aby usunąć element, używana jest metoda get ().