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