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