Struktury dynamiczne LISTY WSKAŹNIKOWE: listy z dowiązaniami

Transkrypt

Struktury dynamiczne LISTY WSKAŹNIKOWE: listy z dowiązaniami
Struktury dynamiczne
Lista dwukierunkowa:
LISTY WSKAŹNIKOWE:
pole kluczowe
(dane)
listy z dowiązaniami jednokierunkowymi,
listy z dowiązaniami dwukierunkowymi,
pole wskaźnikowe
(na poprzedni rekord)
GŁOWA
listy cykliczne z wartownikiem ...
pole wskaźnikowe
(na następny rekord)
...
Lista jednokierunkowa:
GŁOWA
1.
pole wskaźnikowe
(wskazanie na następny rekord)
pole kluczowe
(dane)
3.
N
Kolejność rekordów na liście jest jednoznacznie ustalona przez
liczbę wskazań (adresów) jakie należy odczytać zaczynając od
głowy listy np. w celu poznania zawartości ich pola kluczowego.
...
Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r.
1
Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r.
2
Algorytm sumowania płac wszystkich pracowników firmy,
których dane zapamiętano w liście jednokierunkowej:
Lista dwukierunkowa cykliczna z wartownikiem:
Użyte struktury danych
pole kluczowe
(dane)
GŁOWA
2.
Rekord do przechowania danych pojedynczego pracownika:
wartownik
(specjalna
wartość pola
kluczowego)
pole wskaźnikowe
(na następny rekord)
pole wskaźnikowe
(na poprzedni rekord)
pole liczbowe PŁACA -
2700
Jan
pole tekstowe IMIĘ -
...
pole tekstowe NAZWISKO -
Dynamiczny
pole wskaźnikowe NASTĘPNY -
Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r.
3
GŁOWA (wskaźnik)
3000
2700
2500
...
NIL
Zmienna wskaźnikowa P do wskazywania bieżącego
rekordu z danymi pracownika,
GŁOWA
pomocnicza zmienna S do przechowywania wyniku.
PŁACA
P
1750
3000
2700
2500
...
NASTĘPNY
Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r.
4
1. S ← 0 (ustalenie początkowej wartości sumy płac),
2. P ← GŁOWA
(ustalenie początkowej wartości bieżącego wskaźnika),
3. dopóki P ≠ NIL wykonuj co następuje:
3.1. S ← S + PŁACA.[P],
3.2. P ← NASTĘPNY.[P],
4. odczytaj wartość zmiennej S.
Lista do przechowania danych wszystkich pracowników:
1750
Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r.
5
Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r.
NIL
6
1
start
STOS (zrealizowany na liście jednokierunkowej):
S←0
Ustalamy, że nowy rekord może być wstawiony tylko jako
pierwszy na liście, czyli operacja WSTAW nie wymaga parametru!
P ← GŁOWA
GŁOWA
P ≠ NIL
NIE
TAK
S ← S + PŁACA.[P]
P ← NASTĘPNY.[P]
...
stop
WSTAW
po zakończeniu działania
algorytmu zmienna S ma
wartość sumy płac wszystkich
pracowników
Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r.
7
Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r.
8
położenie
na stos
(WSTAW)
Ustalamy, że usuwany z listy może być tylko rekord, który jest
pierwszy na liście, czyli operacja USUŃ nie wymaga parametru!
zdjęcie
ze stosu
(USUŃ)
n
Brak
dostępu
dla operacji
WSTAW
i USUŃ
GŁOWA
...
n–1
2
kolejność
wstawiania
1
STOS
USUŃ
STOS = lista LIFO (Last-In-First-Out)
Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r.
9
Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r.
10
KOLEJKA (zrealizowana na liście jednokierunkowej):
Ustalamy, że nowy rekord może być wstawiony tylko jako
pierwszy na liście, czyli operacja WSTAW nie wymaga parametru!
GŁOWA
Ustalamy, że usuwany z listy może być tylko rekord, który jest
ostatni na liście, czyli operacja USUŃ nie wymaga parametru!
GŁOWA
...
...
WSTAW
Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r.
OGON
USUŃ
11
Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r.
12
2
DRZEWA (ukorzenione):
Brak
dostępu
dla operacji
WSTAW
i USUŃ
pole wskaźnikowe
(wskazanie na rodzica)
KORZEŃ
pole kluczowe
pole wskaźnikowe
(wskazanie na 1. potomka)
pole wskaźnikowe
(wskazanie na 2. potomka)
...
dołączenie
do kolejki
(WSTAW)
n n–1
3
2
1
odłączenie
od kolejki
(USUŃ)
kolejność
wstawiania
KOLEJKA
KOLEJKA = lista FIFO (First-In-First-Out)
Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r.
13
Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r.
14
Drzewiaste struktury danych:
każdy rekord w strukturze drzewiastej nazywany jest
węzłem lub wierzchołkiem drzewa,
tylko jeden rekord w takiej strukturze ma w polu
wskaźnikowym na rodzica adres pusty NIL – ten rekord
nazywany jest korzeniem, bo przy budowaniu struktury był
pierwszym do niej wstawionym,
rekord, w którym wszystkie pola wskaźnikowe
przeznaczone do wskazywania rekordów potomnych
zawierają adres pusty (NIL) nazywamy liściem drzewa,
pola wskaźnikowe rekordu używanego do budowy takiej
struktury mogą wskazywać na wiele rekordów potomnych
oddalonych od pierwszego (korzenia) o taką samą liczbę
wskazań, które należy odczytać np. w celu poznania
zawartości ich pola kluczowego,
oba wskazania razem, które występują
pomiędzy dwoma rekordami będącymi
dla siebie bezpośrednim rodzicem
i potomkiem nazywamy gałęzią drzewa:
dla każdych dwóch rekordów w takiej strukturze istnieje
tylko jedna droga prowadząca od pierwszego do drugiego
rekordu przez kolejne wskazania.
Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r.
15
Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r.
dla danego rekordu liczba wskazań (adresów), które
należy odczytać poczynając od wskaźnika na korzeń drzewa
np. w celu poznania zawartości jego pola kluczowego,
określa poziom na jakim ten rekord znajduje się w drzewie,
korzeń
rzędem drzewa nazywamy największą liczbę
wierzchołków potomnych jaką można znaleźć wśród
wszystkich jego wierzchołków (jest to zatem największa
liczba pól w tym samym rekordzie, które wskazując na
rekordy potomne nie zawierają pustego adresu),
Poziom 1
rodzic
gałąź
węzły
Poziom 2
potomek
Poziom 3
drzewo, w którym żaden wierzchołek nie ma więcej niż 2
wierzchołki potomne nazywamy drzewem binarnym,
liść
drzewo, w którym wszystkie wierzchołki poza liśćmi mają
jednakową liczbę potomków i wszystkie liście są na tym
samym poziomie nazywamy drzewem pełnym.
Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r.
16
liść
Poziom 4
Drzewo rzędu 3
17
Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r.
18
3
prawy
potomek
lewy
potomek
lewe
poddrzewo
prawe
poddrzewo
Binarne drzewo pełne o 4 poziomach
Drzewo binarne
Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r.
19
kierunek odczytywania
Etap 1. Zapisanie elementów z nieuporządkowanej listy
wejściowej w wierzchołkach binarnego drzewa poszukiwań T
(ang. Binary Search Tree)
128 76 106 402 100 46 354 987 112 28 396 35
Etap 2. Obejście drzewa T (odwiedzenie wszystkich
wierzchołków) według zasady lewostronnego przeglądu w głąb i
wypisywanie elementów listy przy drugich odwiedzinach
wierzchołka.
Etap 1:
Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r.
28
28
100
35 46
22
drzewo T
lewe
poddrzewo
LT
prawe
poddrzewo
PT
Procedura obejdź(T)
1. jeśli drzewo T jest puste, to wróć do poziomu wywołania,
2. w przeciwnym przypadku wykonaj co następuje:
2.1. wywołaj obejdź (LT),
2.2. wypisz element umieszczony w korzeniu drzewa T,
2.3. wywołaj obejdź (PT),
Reguła wypisywania
3. wróć do poziomu wywołania.
IN-ORDER
396
76 100 106 112 128 354 396 402 987
Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r.
396
987
35
28
112
987
Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r.
Procedura
rekurencyjna
realizująca
2. etap algorytmu
sortowania
drzewiastego:
402
112
100
354
Drzewo BST
128
354
106
35
koniec przeglądu
106
402
46
21
76
128
76
Drzewo BST to takie drzewo binarne, w którym dla dowolnie
wskazanego wierzchołka spełnione są dwa warunki:
żaden z elementów zapisanych w wierzchołkach jego lewego
poddrzewa nie jest większy od elementu zapisanego w tym
wierzchołku i żaden z elementów zapisanych w wierzchołkach
jego prawego poddrzewa nie jest mniejszy od tego elementu .
46
20
Przykładowa realizacja algorytmu sortowania drzewiastego
Algorytm sortowania drzewiastego:
Etap 2: początek przeglądu
Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r.
23
Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r.
24
4