03 Implementacja Kolejki Priorytetowej Kopiec

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 19

Implementacja kolejki

priorytetowej
Algorytmy i struktury danych II
Implementacja kolejki priorytetowej

Zaimplementujemy teraz kolejkę za pomocą kopca.


W zadaniu mają Państwo kod bez Insert i DeleteMax.
Na 3.0 należy uzupełnić Insert (łatwiejsze).
Na 4.0 należy uzupełnić dodatkowo DeleteMax.
Na 4.0 powinno wyglądać to następująco:
Implementacja kolejki priorytetowej
Implementacja kolejki priorytetowej

Na ocenę 5.0 trzeba dodać obliczanie liczby porównań


w operacji insert (porównania priorytetów). Powinno to
wyglądać następująco:
Implementacja kolejki priorytetowej
Implementacja kolejki priorytetowej

Deklarujemy pomocniczą stałą MAX. 2147483647 jest


maksymalną wartością jaką może przyjmować int.
Deklarujemy stałą N, wielkość tablicy na kopiec.
Implementacja kolejki priorytetowej

Element kolejki składa się z danych i priorytetu.


Implementacja kolejki priorytetowej

Definiujemy klasę priorityqueue:


• T[ N ] to nasza tablica na kopiec
(składa się z elementów typu
QueueEl)
• n będzie ilością węzłów kopca
Deklarujemy metody (funkcje
klasy).
Implementacja kolejki priorytetowej

Zdefiniujemy teraz metody. Każda klasa musi mieć konstruktor (tworzy obiekt) i
destruktor (usuwa obiekt).

Konstruktor priorityqueue()
ustawia liczbę węzłów na 0.
Destruktor ~priorityqueue()
zostawiamy pusty.
Implementacja kolejki priorytetowej

Metoda empty zwraca true jeśli kolejka jest pusta. (n to


liczba węzłów, !n da nam true jeśli n=0 i false jeśli n<>0).
Implementacja kolejki priorytetowej

Zwraca pierwszy element kolejki (o największym priorytecie), jeśli


kolejka jest pusta zwraca stałą MAX.
Implementacja kolejki priorytetowej

Zwraca priorytet pierwszego elementu kolejki (o największym


priorytecie), jeśli kolejka jest pusta zwraca stałą MAX.
Implementacja kolejki priorytetowej

Insert, czyli wstawienie elementu zgodnie z priorytetem: wstawiamy nowy


element na ostatnią pozycję i przywracamy warunek kopca idąc w górę.
Implementacja kolejki priorytetowej

DeleteMax:
 usuwamy element z korzenia
 w jego miejsce wstawiamy ostatni element (skrajnie
prawy na ostatnim poziomie kopca – czyli ostatni w
tablicy)
 przywracamy warunek kopca począwszy od korzenia
w dół.
Implementacja kolejki priorytetowej
Implementacja kolejki priorytetowej

Jak obliczyć indeks starszego syna?


Sprawdzamy czy istnieje lewy syn (wszystkich węzłów
mamy n, więc trzeba sprawdzić, czy 2*i <=n), jeśli tak to
za older podstawiamy jego indeks.
Później wystarczy sprawdzić, czy istnieje prawy i czy nie
jest on starszy od lewego.
Implementacja kolejki priorytetowej

I główny program:
Implementacja kolejki priorytetowej

Wstawiamy do kolejki 10 elementów, są one ponumerowane kolejno


od 1 do 10 i każdy z nich ma losowy priorytet 0-99.
Implementacja kolejki priorytetowej

Dopóki kolejka nie jest pusta, wypisujemy maksymalny element, a następnie


go usuwamy.

You might also like