Podstawy Programowania - Instytut Informatyki Teoretycznej i
Transkrypt
Podstawy Programowania - Instytut Informatyki Teoretycznej i
Podstawy Programowania dr Elżbieta Gawrońska [email protected] Instytut Informatyki Teoretycznej i Stosowanej dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 13 1 / 25 Lista – podstawowa terminologia lista L – jest skończona˛ sekwencja˛ zera lub wi˛ekszej liczby elementów długość listy – jest liczba˛ wystapień ˛ elementów należacych ˛ do listy (zerowa liczba elementów - lista pusta ε) podciag ˛ – listy L jest to lista utworzona przez wyciagni˛ ˛ ecie zera lub wi˛ekszej liczby elementów z listy L pozycja – (pierwszy, drugi, ..., ostatni) wystapienie ˛ – każdy element na liście jest zwiazany ˛ z określona˛ pozycja,˛ na której si˛e znajduje Liczba pozycji na liście jest równa długości tej listy. Istnieje możliwość wyst˛epowania tego samego elementu na dwóch lub wi˛ecej pozycjach. dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 13 2 / 25 Lista – implementacja tablicowa – stworzenie struktury złożonej z tablicy przechowujacej ˛ elementy danego typu zmiennej przechowujacej ˛ liczb˛e elementów aktualnie znajdujacych ˛ si˛e na liście zmiennej ograniczajacej ˛ łaczn ˛ a˛ liczb˛e elementów, które można umieścić na liście wskaźnikowa – stworzenie struktury wykorzystujacej ˛ jednokierunkowa˛ list˛e komórek, z których każda zawiera element listy i wskaźnik do nast˛epnej komórki, który jest podstawa˛ nawigacji w takiej implementacji reprezentacja tablicowa list jest z wielu powodów bardziej wygodna niż reprezentacja wskaźnikowa; niewatpliwie ˛ wada˛ tablic jest ograniczenie rozmiaru listy do założonego z góry rozmiaru tablicy, w reprezentacji wskaźnikowej można zwi˛ekszać rozmiar tablicy aż do momentu wyczerpania dost˛epnej pami˛eci dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 13 3 / 25 Lista – wersja tablicowa (1) Lista ciagła ˛ (tablicowa), utworzenie listy L przechowujacej ˛ co najwyżej l elementów przykładowy kod źródłowy: struct List { char ∗ elem ; unsigned size ; unsigned capacity ; }; void init ( List& L , unsigned l ) { L . elem = new char [ l ] ; L . size = 0 ; L . capacity = l ; } dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 13 4 / 25 Lista – wersja tablicowa (2) Wstawienie elementu o wartości v na pozycj˛e p listy L przykładowy kod źródłowy: void insert ( List& L , char v , unsigned p ) { if ( L . size < L . capacity ) { for ( unsigned i = L . size ; i > p ; −−i ) L . elem [ i ] = L . elem [ i − 1 ] ; L . elem [ p ] = v ; ++L . size ; } } dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 13 5 / 25 Lista – wersja tablicowa (2) Usuni˛ecie elementu z pozycji p listy L przykładowy kod źródłowy: void erase ( List& L , unsigned p ) { if ( L . size > 0 ) { for ( unsigned i = p ; i < L . size ; ++i ) L . elem [ i ] = L . elem [ i + 1 ] ; −−L . size ; } } dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 13 6 / 25 Listy – rodzaje (1) W implementacji listy za pomoca˛ wskaźników można wyróżnić nast˛epujace ˛ rodzaje list: lista łaczona ˛ jednokierunkowo – w każdym elemencie listy jest przechowywane odniesienie tylko do jednego sasiada ˛ (nast˛epnika lub poprzednika): dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 13 7 / 25 Listy – rodzaje (2) Definicja struktury opisujacej ˛ w˛ezeł i list˛e jednokierunkowa˛ w wersji wskaźnikowej: przykładowy kod źródłowy: struct Node { T data ; Node ∗ next ; }; struct LList { Node ∗ first ; }; dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 13 8 / 25 Listy – rodzaje (3) W implementacji listy za pomoca˛ wskaźników można wyróżnić nast˛epujace ˛ rodzaje list: lista łaczona ˛ dwukierunkowo – w każdym elemencie listy jest przechowywane odniesienie zarówno do nast˛epnika jak i poprzednika elementu w liście, taka reprezentacja umożliwia swobodne przemieszczanie si˛e po liście w obie strony: dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 13 9 / 25 Listy – rodzaje (4) Definicja struktury opisujacej ˛ w˛ezeł i list˛e dwukierunkowa˛ w wersji wskaźnikowej: przykładowy kod źródłowy: struct Node { T data ; Node ∗ next ; Node ∗ prev ; }; struct SList { SListNode ∗ begin , ∗ end , ∗ current ; }; dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 13 10 / 25 Dodawanie elementów do listy (1) dodanie nowego elementu do środka listy: dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 13 11 / 25 Dodawanie elementów do listy (2) dodanie nowego elementu do środka listy: dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 13 12 / 25 Dodawanie elementów do listy (3) dodanie nowego elementu do środka listy: dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 13 13 / 25 Dodawanie elementów do listy (4) przykładowy kod źródłowy: void insert ( LList& L , T v , Node ∗p = 0 ) { Node ∗ nd = new Node ; nd−>data = v ; Node∗& current = p ? p−>next : L . first ; nd−>next = current ; current = nd ; } dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 13 14 / 25 Usuwanie elementów z listy (1) usuni˛ecie elementu z środka listy: dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 13 15 / 25 Usuwanie elementów z listy (2) usuni˛ecie elementu z środka listy: dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 13 16 / 25 Usuwanie elementów z listy (3) przykładowy kod źródłowy: void erase ( LList& L , Node ∗ p = 0 ) { Node∗& current = p ? p−>next : L . first ; if ( current ) { Node ∗ tmp = current ; current = current −>next ; delete tmp ; } } dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 13 17 / 25 Kolejka lista ze schematem FIFO, podstawowe operacje wstawianie – push usuwanie – pop dost˛ep do elementu – front elem w1 w2 w3 w4 w5 w6 w7 size = 7 front rear elem w2 w3 w4 w5 w6 capacity w7 size = 6 front elem w1 w2 rear w3 w4 w5 w6 capacity w7 w8 size = 8 front dr Elżbieta Gawrońska (ICIS) rearcapacity Podstawy Programowania 13 18 / 25 Stos lista ze schematem LIFO, podstawowe operacje wstawianie – push usuwanie – pop dost˛ep do elementu – top capacity capacity top capacity top top w7 w7 w7 w6 w6 w6 w5 w5 w5 w4 w4 w4 w3 w3 w3 w2 w2 w2 w1 w1 w1 elem elem elem dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 13 19 / 25 Drzewa I drzewo to hierarchiczne ułożenie danych w˛ ezeł to punkt w drzewie korzeń to w˛ezeł znajdujacy ˛ si˛e na poziomie 1 potomstwo korzenia to w˛ezły znajdujace ˛ si˛e na poziomie 2, potomstwo w˛ezłów z poziomu 2 znajduje si˛e na poziomie 3, itd. liść to w˛ezeł nie posiadajacy ˛ potomstwa dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 13 20 / 25 Drzewa II w˛ ezeł wewn˛ etrzny to taki w˛ezeł, który posiada jednego lub wi˛ecej potomków gałaź ˛ to sekwencja w˛ezłów odpowiadajacych ˛ przejściu w dół, od korzenia do liścia drzewo binarne to takie, w którym każdy w˛ezeł ma co najwyżej dwójk˛e potomstwa kraw˛ edź w drzewie to połaczenie ˛ dwóch w˛ezłów drzewo jest spójne, jeśli rozpoczynajac ˛ jego analiz˛e od dowolnego w˛ezła nie b˛edacego ˛ korzeniem, przechodzac ˛ do jego rodzica itd., osiagni˛ ˛ ety zostanie korzeń ciag ˛ w˛ezłów m1 , m2 , ..., mk w pewnym drzewie jest ścieżka, ˛ jeśli spełnia relacje: w˛ezeł m2 jest potomkiem w˛ezła m1 , w˛ezeł m3 jest potomkiem w˛ezła m2 itd. aż do w˛ezła mk , który jest potomkiem w˛ezła mk−1 długościa˛ takiej ścieżki jest k − 1 dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 13 21 / 25 Drzewa III wysokościa˛ w˛ezła jest długość najdłużej ścieżki od tego w˛ezła do liścia wysokościa˛ drzewa jest wysokość korzenia gł˛ ebokościa˛ (poziomem) w˛ezła jest długość ścieżki od korzenia do tego w˛ezła. dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 13 22 / 25 Drzewo reprezentujace ˛ zbiór słów I drzewo reprezentujace ˛ zbiór słów nosi nazw˛e drzewa trie każdy w˛ezeł drzewa trie, poza korzeniem, zwiazany ˛ jest z pewna˛ litera˛ alfabetu ciag ˛ znaków reprezentowany przez w˛ezeł n jest sekwencja˛ liter leżacych ˛ w ścieżce łacz ˛ acej ˛ korzeń drzewa z w˛ezłem n etykieta w˛ezła składa si˛e z litery oraz wartości logicznej określajacej ˛ czy ciag ˛ złożony z liter od korzenia do w˛ezła tworzy kompletne słowo drzewo trie umożliwia efektywne sprawdzanie, czy dana sekwencja liter jest poprawnym słowem (czy znajduje si˛e w “słowniku”) dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 13 23 / 25 Drzewo trie (1) dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 13 24 / 25 Drzewo trie (2) dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 13 25 / 25