Jak już dowiedziałeś się o znaczeniu struktur danych w poprzednim artykule, przejdźmy od razu do tematu artykułu, tj. Struktury danych kolejki. Będę omawiać następujące tematy:
- Potrzeba struktury danych kolejki
- Przykłady kolejki w życiu codziennym
- Tworzenie struktury danych kolejki
- W kolejce
- Usuń kolejkę
- Zastosowania kolejki
Potrzeba struktury danych kolejki
Załóżmy, że pewnego dnia chcesz obejrzeć film. W multipleksie bilety były wydawane na zasadzie „kto pierwszy, ten lepszy”, a ludzie stali jeden za drugim, czekając na swoją kolej. Więc, co zrobisz?? Musiałeś przejść na tyły i stanąć za ostatnią osobą czekającą na bilet.
Tutaj ludzie stoją jeden za drugim i są obsługiwani w oparciu o Pierwszy przyszedł, pierwszy wyszedł (FIFO) mechanizm. Taki układ jest znany jako Kolejka.
jak przekonwertować binarne na dziesiętne w java
Przykłady kolejki w życiu codziennym
Rozważmy kilka przykładów, w których widzimy typ kolejki działający w życiu codziennym:
- Automatyczna sekretarka Osoba, która zadzwoni jako pierwsza z Twojego gadżetu, zostanie włączona jako pierwsza.
- Maszyna do sprawdzania bagażu - Sprawdza Bagaż, który był trzymany jako pierwszy na taśmie.
- Pojazdy na moście płatno-podatkowym - Pojazdy przybywające wcześnie wyjeżdżają jako pierwsze.
- Call Center - systemy telefoniczne będą korzystać z kolejek, aby utrzymywać osoby dzwoniące do nich do czasu zwolnienia przedstawiciela serwisu.
Wszystkie te przykłady podano poniżej Pierwszy przychodzi, ostatni wychodzi strategia.
Tworzenie struktury danych kolejki
Oprócz operacji komplementarnych mogę powiedzieć, że główne Operacje możliwe na Kolejce to:
jeden. W kolejce lub dodaj element na końcu kolejki.
2. Usuń kolejkę lub usuń element z początku kolejki
Teraz zacznijmy od stworzenia kolejki klas w Pythonie:
class Kolejka: def __init __ (self, max_size): self .__ max_size = max_size self .__ elements = [None] * self .__ max_size self .__ rear = -1 self .__ front = 0
- największy rozmiar to maksymalna liczba elementów oczekiwanych w kolejce.
- Elementy kolejki są przechowywane na liście Pythona
- tył wskazuje pozycję indeksu ostatniego elementu w kolejce.
- Z tyłu przyjmuje się początkowo wartość -1, ponieważ kolejka jest pusta
- Front wskazuje pozycję pierwszego elementu w kolejce.
- Front jest początkowo przyjmowany jako 0, ponieważ zawsze będzie wskazywał na pierwszy element kolejki
Umieść w kolejce
Teraz, gdy próbujesz umieścić elementy w kolejce do kolejki, musisz pamiętać o następujących kwestiach:
- Czy w kolejce pozostało miejsce, czy nie, np. Czy tył jest równy max_size -1
- Tył będzie wskazywał ostatni element wstawiony do kolejki.
Więc jaki będzie algorytm?
#returns max_size of queue def get_max_size (self): return self .__ max_size #returns bool value niezależnie od tego, czy kolejka jest pełna czy nie, True if full and False w przeciwnym razie def is_full (self): return self .__ rear == self .__ max_size-1 # wstawia / umieszcza dane w kolejce, jeśli nie są one pełne. def enqueue (self, data): if (self.is_full ()): print ('Queue is full. __elements [self .__ rear] = data #display całą zawartość kolejki def display (self): for i in range (0, self .__ rear + 1): print (self .__ elements [i]) #Możesz użyć poniżej __str __ (), aby wydrukować elementy obiektu DS podczas debugowania def __str __ (self): msg = [] index = self .__ front while (index<=self.__rear): msg.append((str)(self.__elements[index])) index+=1 msg=' '.join(msg) msg='Queue data(Front to Rear): '+msg return msg
Teraz, kiedy wykonasz następujące czynności:
queue1 = Queue (5)
# Kolejka wszystkich wymaganych elementów.
queue1.enqueue („A”)
queue1.enqueue („B”)
queue1.enqueue („C”)
queue1.enqueue („D”)
queue1.enqueue („E”)
queue1.display ()
queue1.enqueue („F”)
print (queue1)
Wynik:
DO
b
do
re
JEST
Kolejka jest pełna. Brak możliwości kolejkowania
Dane kolejki (od przodu do tyłu): A B C D E
Usuń kolejkę
Teraz, po wstawieniu / kolejkowaniu elementów do kolejki, chcesz usunąć z kolejki / usunąć je z przodu, więc musisz zadbać o następujące kwestie:
- W kolejce są elementy, czyli tył nie powinien być równy -1.
- Po drugie trzeba pamiętać, że skoro elementy są usuwane od frontu, to po usunięciu frontu należy inkrementować tak, aby wskazywał następny front.
- Przód nie powinien wskazywać końca kolejki, tj. Równego max_size.
Więc jaki będzie algorytm?
# function do sprawdzenia, czy kolejka jest pusta, czy nie. def is_empty (self): if (self .__ rear == - 1 lub self .__ front == self .__ max_size): return True else: return False # function dequeelement i return it def dequeue (self): if (self.is_empty ()): print ('kolejka jest już pusta') else: data = self .__ elements [self .__ front] self .__ front + = 1 return data #function do wyświetlenia elementów z od przodu do tyłu jeśli kolejka nie jest pusta def display (self): if (not self.is_empty ()): for i in range (self .__ front, self .__ rear + 1): print (self .__ elementów [i]) else : print ('pusta kolejka')
Teraz, gdy wykonasz następujące czynności:
queue1 = Queue (5)
# Kolejka wszystkich wymaganych elementów
queue1.enqueue („A”)
queue1.enqueue („B”)
queue1.enqueue („C”)
queue1.enqueue („D”)
queue1.enqueue („E”)
print (queue1)
# Usuń z kolejki wszystkie wymagane elementy
print („Dequeued:“, queue1.dequeue ())
print („Dequeued:“, queue1.dequeue ())
print („Dequeued:“, queue1.dequeue ())
print („Dequeued:“, queue1.dequeue ())
print („Dequeued:“, queue1.dequeue ())
print („Dequeued:“, queue1.dequeue ())
# Wyświetl wszystkie elementy w kolejce.
queue1.display ()
Wynik:
Dane kolejki (od przodu do tyłu): A B C D E
Odkolejowany: A.
Odkolejowany: B.
Odkolejowany: C.
Odkolejowany: D.
Usunięte z kolejki: E.
kolejka jest już pusta
Usunięte z kolejki: brak
pusta kolejka
Zastosowania kolejki
Do tej pory znasz już podstawy kolejkowania. Teraz, aby zanurkować głębiej, przyjrzymy się niektórym z jego zastosowań.
- Przykład 1:
Print Queue w systemie Windows używa kolejki do przechowywania wszystkich aktywnych i oczekujących zadań drukowania. Chcąc wydrukować dokumenty, wydajemy polecenia drukowania jedno po drugim. Na podstawie poleceń drukowania dokumenty zostaną ułożone w kolejce drukowania. Gdy drukarka będzie gotowa, dokument zostanie wysłany jako pierwszy w kolejności, aby mógł zostać wydrukowany.
Załóżmy, że wydałeś polecenia drukowania dla 3 dokumentów w kolejności doc1, a następnie doc2 i doc3.
Kolejka drukowania zostanie zapełniona, jak pokazano poniżej:
doc-n, gdzie doc to dokument wysłany do druku an, to liczba stron w dokumencie. Na przykład doc2-10 oznacza, że ma zostać wydrukowany doc2 i ma 10 stron. Oto kod, który symuluje działanie kolejki wydruku. Przejdź przez kod i obserwuj, jak kolejka jest używana w tej implementacji.
class Kolejka: def __init __ (self, max_size): self .__ max_size = max_size self .__ elements = [None] * self .__ max_size self .__ rear = -1 self .__ front = 0 def is_full (self): if (self .__ rear = = self .__ max_size-1): return True return False def is_empty (self): if (self .__ front> self .__ rear): return True return False def enqueue (self, data): if (self.is_full ()): print ('Queue is full !!!') else: self .__ rear + = 1 self .__ elements [self .__ rear] = data def dequeue (self): if (self.is_empty ()): print ('Queue is empty! !! ') else: data = self .__ elementów [self .__ front] self .__ front + = 1 return data def display (self): for index in range (self .__ front, self .__ rear + 1): print (self .__ elementów [index]) def get_max_size (self): return self .__ max_size #Możesz użyć poniższej __str __ (), aby wydrukować elementy obiektu DS podczas #debugging def __str __ (self): msg = [] index = self .__ front while (indeks<=self.__rear): msg.append((str)(self.__elements[index])) index+=1 msg=' '.join(msg) msg='Queue data(Front to Rear): '+msg return msg #function that enqueue are the documents to be printed in Queue named print_queue def send_for_print(doc): global print_queue if(print_queue.is_full()): print('Queue is full') else: print_queue.enqueue(doc) print(doc,'sent for printing') #function that prints the document if number of pages of document is less than #total number of pages in printer def start_printing(): global print_queue while(not print_queue.is_empty()): #here we dequeue the Queue and take the coument that was input first for printing. doc=print_queue.dequeue() global pages_in_printer #the aim of this for loop is to find number of pages of the of document which is doc name followed by “-“ for i in range(0,len(doc)): if(doc[i]=='-'): no_of_pages=int(doc[i+1:]) break if(no_of_pages<=pages_in_printer): print(doc,'printed') pages_in_printer-=no_of_pages print('Remaining no. of pages in printer:', pages_in_printer) else: print('Couldn't print',doc[:i],'. Not enough pages in the printer.') pages_in_printer=12 print_queue=Queue(10) send_for_print('doc1-5') send_for_print('doc2-3') send_for_print('doc3-6') start_printing()
Wynik:
doc1-5 wysłany do druku
doc2-3 wysłany do druku
doc3-6 wysłany do druku
doc1-5 wydrukowane
Pozostałe nr. stron w drukarce: 7
doc2-3 wydrukowane
Pozostałe nr. stron w drukarce: 4
Nie udało się wydrukować doc3. Za mało stron w drukarce
- Przykład 2:
Spróbujmy zrozumieć inny przykład wykorzystujący strukturę danych kolejki. Czy możesz spróbować zrozumieć kod i powiedzieć, co robi następująca funkcja?
- def fun (n):
- aqueue = Queue (100)
- dla liczby w zakresie (1, n + 1):
- enqueue (num)
- wynik = 1
- while (nie (aqueue.is_empty ())):
- num = AQUUE.DEQUEUE ()
- wynik * = liczba
- print (wynik)
Gdy funkcja fun () jest wywoływana przez przekazanie n,
typ danych dla daty w sql
- linie od 2 do 4 kolejkują elementy od 1 do n
- linie od 5 do 8 znajdują iloczyn tych elementów, usuwając je z kolejki jeden po drugim
Na tym kończymy artykuł o strukturze danych kolejki. Jeśli pomyślnie zrozumieliście i samodzielnie uruchomiliście kody, nie jesteście już nowicjuszem w strukturze danych kolejki.
Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy w tym artykule, a my skontaktujemy się z Tobą tak szybko, jak to możliwe.
Aby uzyskać dogłębną wiedzę na temat języka Python i jego różnych aplikacji, możesz zarejestrować się na żywo z całodobowym wsparciem i dożywotnim dostępem.