Struktury danych: Kolejka
Transkrypt
Struktury danych: Kolejka
Struktury danych: Kolejka 11/23/2005 Różnice w stosunku do stosu Struktury danych: Kolejka ! Różnice kolejka – stos Nazewnictwo kolejki Pełzanie kolejki Kolejka cykliczna ! ! Kolejka (queue) jest listą, na której wstawianie odbywa się na jednym końcu, a każde usuwanie na drugim, przeciwległym końcu Jest to struktura FIFO (First Input First Output) – pierwszy wchodzi, pierwszy wychodzi) Jest to typowe dla systemów, w których zdarzenia sa obsługiwane kolejności ich pojawiania się 2/12 Nazewnictwo kolejki ! ! ! Kłopoty z kolejką… Końce kolejki (zjawisko bardzo popularne w czasach PRL) zawdzięczają nazwy analogii do `ludzkich` kolejek ! ! ! Koniec, z którego elementy są usuwane (obsługiwane) to początek lub głowa kolejki (head) Zakończenie kolejki, gdzie dopisuje się kolejne elementy (stają tak kolejni kolejkowicze) to koniec kolejki lub jej ogon (tail) ! ©2005 R. Robert ‘RoG@j’ Gajewski Wstawienie elementu – nowy element umieszcza się na pozycji wskazywanej przez wskaźnik końca, a wskaźnik końca przesuwa się tak, by wskazywał na puste miejsce Wskaźnik końca będzie zawsze wskazywał na pierwsza wolna lokalizacje na końcu kolejki 4/12 Praca z kolejką (1) 5/12 Operacje w kolejce będziemy wykonywać zarówno na jej początku jak tez na końcu Gdy kolejka jest pusta oba wskaźniki będą wskazywać na ten sam punkt w pamięci ! Kolejkę można zaimplementować w podobny sposób jak stos jako zwarty blok komórek 3/12 ©2005 R. Robert ‘RoG@j’ Gajewski ©2005 R. Robert ‘RoG@j’ Gajewski Praca z kolejką (2) WSKAŹNIK POCZĄTKU WSKAŹNIK POCZĄTKU WSKAŹNIK KOŃCA WSKAŹNIK KOŃCA ©2005 R. Robert ‘RoG@j’ Gajewski (C)2005 R. Robert "RoG@j" Gajewski WSKAŹNIK POCZĄTKU A WSKAŹNIK KOŃCA 6/12 A B WSKAŹNIK POCZĄTKU WSKAŹNIK KOŃCA B ©2005 R. Robert ‘RoG@j’ Gajewski 1 Struktury danych: Kolejka 11/23/2005 Drobny problem… ! WSKAŹNIK POCZĄTKU Tak zorganizowana kolejka będzie „pełzać” przez pamięć, niszcząc po drodze zapisane tam dane ! ! ! Pełzająca kolejka Związane jest to z tym, że nowy element jest umieszczany tuz za poprzednim – powoduje to zmianę wskaźnika końca kolejki Nawet mała (krótka) kolejka, na skutek zmian elementów będzie „pełzać” przez pamięć… WSKAŹNIK KOŃCA ©2005 R. Robert ‘RoG@j’ Gajewski ! E 8/12 ©2005 R. Robert ‘RoG@j’ Gajewski ! ! Implementację, która stosuje taka technikę nazywa się kolejką cykliczną Blok pamięci przypomina pętlę – ostatnia komórka sąsiaduje z pierwszą 10/12 Kolejka cykliczna ©2005 R. Robert ‘RoG@j’ Gajewski Koncepcja i implementacja PIERWSZA KOMÓRKA W BLOKU ! Pomiędzy strukturą koncepcyjną kolejki cyklicznej a rzeczywistą strukturą zaimplementowana w pamięci komputera są różnice… KIERUNEK PEŁZANIA ! ! ! ! ©2005 R. Robert ‘RoG@j’ Gajewski (C)2005 R. Robert "RoG@j" Gajewski 12/12 Które ukrywa oprogramowanie Istotnym elementem jest zestaw procedur i funkcji (podprogramów), które służą do realizacji operacji takich jak: ! OSTATNIA KOMÓRKA W BLOKU 11/12 ©2005 R. Robert ‘RoG@j’ Gajewski Kolejka cykliczna 9/12 WSKAŹNIK POCZĄTKU B D Przeznaczamy na kolejkę określony obszar pamięci i rozpoczynamy jej tworzenie od jednego końca Kolejka będzie się przemieszczać w kierunku drugiego końca obszaru Gdy dotrze do końca bloku pamięci nowe elementy będą… umieszczane począwszy od początku zarezerwowanego bloku, który jest już pusty (zakładamy, że nie przekroczyliśmy liczby wyrazów kolejki!) Kolejka goni siebie, nie wychodząc poza blok! WSKAŹNIK KOŃCA A C C Rozwiązanie ! WSKAŹNIK KOŃCA Mała a aktywna kolejka będzie wymagać więcej pamięci niż „nieruchawa” duża kolejka 7/12 ! B WSKAŹNIK POCZĄTKU Paradoks ! ! A Wstawianie elementów do kolejki Usuwanie elementów z kolejki Sprawdzanie, czy kolejka nie jest pusta ©2005 R. Robert ‘RoG@j’ Gajewski 2