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