Elementarne struktury danych Piotr Prokopowicz
Plan wykładu Zmienna, tablica, rekord, wskaźnik Abstrakcyjne typy danych (ang. abstract data types) Stos i kolejka Listy
Podstawy Zmienna – pudełko do przechowywania wartości Tablica – ponumerowany szereg pudełek Rekord/struktura – wiązanie pudełek (różnych) w jedną paczkę Wskaźnik – gdzie jest pudełko? Struktura danych (ang. data structure) - sposób przechowania i wykorzystania informacji w komputerze.
Zbiory dynamiczne Na zbiorach dynamicznych operują algorytmy W odróżnieniu od zbiorów w kontekście matematycznym – zbiory dynamiczne mogą się powiększać, zmniejszać zmieniać w różny sposób. Elementem zbioru dynamicznego jest obiekt, który można odczytać oraz zmienić, dysponując wskaźnikiem do niego. Wyróżnione pole obiektu (nie w każdym zbiorze) - klucz – istotne ze względu na realizację zbioru. W elemencie mogą być inne pola, wskaźniki, mniej lub bardziej istotne ze względu na dostęp. Porównywalność kluczy (liniowy porządek) - częste przyjmowane założenie.
Typowe operacje Typowe operacje: zapytania, operacje modyfikujące. S-zbiór, k-klucz, x-element lub wskaźnik do elementu, NIL(NULL) – element nie istnieje SEARCH(S,k) – zapytanie INSERT(S,x) – modyfikacja MINIMUM(S) – zapytanie DELETE(S,x) – modyfikacja MAXIMUM(S) – zapytanie SUCCESOR(S,x) – zapytanie o najmniejszy element większy od x PREDECESOR(S,x) – zapytanie o największy element mniejszy od x Zbiory co najmniej z operacjami: INSERT, DELETE, FIND(S,x) – słowniki.
ADT (abstrakcyjny typ danych) ADT – model (bez szczegółów implementacji) z powiązaną z nim listą operacji. Zbiór dynamiczny w kontekście realizacji komputerowej. Idea klasy w programowaniu obiektowym. Przykład: Liczby całkowite wraz z operacjami. Argumentami operacji także mogą być ADT. Operacje: działania matematyczne, sprawdzanie czy argument jest liczbą całkowitą, różne działania nie tylko matematyczne związane ze specyfiką modelu W komputerze: Typ danych np. integer (lub int)– przechowywanie danych Operacje – implementacja poprzez procedury Struktura danych – przechowanie złożonej informacji w komputerze
Lista Lista – skończony ciąg elementów q = [x1, x2, ... xn] Skrajne elementy listy – końce : lewy - x1, prawy - xn Wielkość listy – długość (rozmiar) |q| = n Szczególny przypadek listy – lista pusta |q| = 0 , q=[ ] Podstawowe operacje: INSERT (x) – dołączenie elementu x do listy DELETE (x) – usunięcie elementu x z listy
Stos Stos (ang. last-in first-out, LIFO) Operacje na stosie: INSERT(x) – PUSH (x) – wstawianie argumentu operacji na stos DELETE – POP – usuwanie – zdjęcie ze stosu (bez argumentu) Wykorzystanie stosu
Kolejka Kolejka (ang. first-in first-out, FIFO) Operacje na kolejce: Początek – głowa Koniec - ogon Operacje na kolejce: INSERT (x) – ENQUEUE (x) – wstawianie DELETE – DEQUEUE – zdjęcie z kolejki (bez argumentu) Wykorzystanie kolejki
Lista z dowiązaniami (wskaźnikowa, dynamiczna) STATYCZNIE a DYNAMICZNIE w kontekście implementacji Lista z dowiązaniami – elementy listy ułożone w liniowym porządku Porządek jest wyznaczany (inaczej niż w tablicy, nie przez indeks) przez wskaźniki, będące składowymi poszczególnych elementów listy. Pierwszy element – głowa, ostatni – ogon Lista z dowiązaniami jest strukturą pozwalającą na realizację wszystkich podstawowych operacji (niekoniecznie optymalnie) na zbiorach dynamicznych nil HEAD klucz poprz nast 5 20 8
Różne listy Dwukierunkowa, jednokierunkowa Uporządkowana, posortowana – kolejność zgodna z porządkiem na kluczach Cykliczna – głowa wskazuje na ogon a ogon na głowę Wartownik – uproszczenie warunków brzegowych, skracanie czasu operacji
Struktury wskaźnikowe Rekordy z wskaźnikami – reprezentowanie ukorzenionych drzew binarnych Reprezentowanie dowolnych ukorzenionych drzew Reprezentowanie grafów Generacja języka – sposób komunikowania się programisty z komputerem
Koniec Dziękuję za uwagę