Laboratorium 11

Transkrypt

Laboratorium 11
Nazwa przedmiotu: Algorytmy i złoŜoność (Laboratorium)
Prowadzący zajęcia: mgr inŜ. Przemysław Pardel
Laboratorium 11
LP
7.
Zakres materiału
Czas
realizacji
Abstrakcyjne struktury danych i ich implementacje: stosy, kolejki, listy, drzewa,
grafy, słowniki, haszowanie, kolejki priorytetowe, drzewa poszukiwań binarnych.
9
Czas realizacji zadań: 3 godziny
Teoria:
Kolejki
Pojęciem kolejka określa się strukturę z ograniczonym dostępem, dla której określono
początek i koniec.
Prostą ilustracją może być kolejka osób do kasy, w której nowe osoby mają prawo ustawić się na
końcu, a obsługiwana jest zawsze osoba z początku. Tak jak w przypadku stosu, procedura obsługi
kolejki ma ogólnie przyjętą nazwę. Mówimy, że elementy są obsługiwane według porządku FIFO
(First In First Out), co oznacza „pierwszy wszedł , pierwszy wyszedł”.
Podobnie jak dla stosu przyjmiemy tablicową implementację kolejki zakładając, że elementy
kolejki są pamiętane w tablicy jednowymiarowej Q[0..n]. Posłużymy się następującymi atrybutami
tablicy Q:
head[Q] – indeks elementu znajdującego się na początku kolejki (głowa)
tail[Q] – indeks pierwszego wolnego elementu na końcu kolejki (ogon)
0 1
Q
2 3 4 5 6 7 8 9
15 6 7 8
head[Q]=2
tail[Q]=6
Q[2]=15
Procedury dostępne w kolejce:
• wstawianie elementu (enqueue)
• usuwanie elementu (dequeue)
W procedurach wstawiania i usuwania elementu z kolejki zakłada się zazwyczaj, że tablica Q[0..n]
jest cykliczna, tzn. po elemencie Q[n] następuje element Q[0].
Na początku przyjmuje się head[Q] = tail[Q] = 0. Spełnienie warunku head[Q] = tail[Q] oznacza,
że kolejka jest pusta. Jeśli natomiast zachodzi równość head[Q] = tail[Q] + 1, to kolejka jest pełna.
Przyjmując tablicową reprezentację kolejki operację umieszczania nowego elementu x w kolejce Q
można napisać w postaci procedury enqueue(Q,x), a operację usuwania z kolejki jako funkcję
dequeue(Q):
Pseudokod
enqueue(Q,x)
Q[tail[Q]=x
jeśli tail[Q] = length[Q]
to tail[Q]=0
inaczej tail[Q]=tail[Q]+1
dequeue(Q)
x= Q[head[Q]
jeśli head[Q] = length[Q]
to head[Q]=0
inaczej head[Q]=head[Q]+1
zwróć x
Kolejkę spotyka się przede wszystkim w sytuacjach związanych z róŜnego rodzaju obsługą zdarzeń.
W szczególności w systemach operacyjnych ma zastosowanie kolejka priorytetowa, przydzielająca
zasoby sprzętowe uruchomionym procesom.
Specjalną modyfikacją kolejki jest kolejka priorytetowa – kaŜda ze znajdujących się w niej danych
dodatkowo ma przypisany priorytet, który modyfikuje kolejność późniejszego wykonania. Oznacza
to, Ŝe pierwsze na wyjściu niekoniecznie pojawią się te dane, które w kolejce oczekują najdłuŜej,
lecz te o największym priorytecie.
Zadania do realizacji:
1. Zaimplementować tablicową implementację kolejki i podstawowe procedury wstawiania i
usuwania elementu z kolejki.
Bibliografia:
1. Świder K.: Algorytmy i struktury danych
2. Wikipedia, Wolna encyklopedia, http://www.wikipedia.pl

Podobne dokumenty