Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

WYKŁAD 2 PROWADZĄCY: DR PAWEŁ DROZDA Algorytmy i Struktury Danych Struktury Danych.

Podobne prezentacje


Prezentacja na temat: "WYKŁAD 2 PROWADZĄCY: DR PAWEŁ DROZDA Algorytmy i Struktury Danych Struktury Danych."— Zapis prezentacji:

1 WYKŁAD 2 PROWADZĄCY: DR PAWEŁ DROZDA Algorytmy i Struktury Danych Struktury Danych

2 Plan Wykładu dr Paweł Drozda Tablice Stosy Kolejki Listy Drzewa

3 Struktury danych – po co? dr Paweł Drozda porządkowanie informacji na komputerach w formie zrozumiałej dla człowieka pomocne narzędzie przy rozwiązywaniu skomplikowanych problemów algorytmicznych listy – ułatwiają tworzenie elastycznych baz danych drzewa binarne – ułatwiają analizę wyrażeń arytmetycznych grafy – duże zastosowanie w dziedzinie sztucznej inteligencji

4 Tablice (1) dr Paweł Drozda Najprostsza struktura danych Kontener zawierający N elementów typu T Dostęp do elementów przy pomocy indeksu (pozycji) Operacje  USTAW(τ, x, p) – w tablicy τ wstaw element x na pozycji p  POBIERZ(τ, p) – z tablicy τ odczytaj element na pozycji p  USUŃ(τ, p) – z tablicy τ usuń element na pozycji p Przykład: tablica liczb całkowitych indeks element tablicy o indeksie 2, zawierający wartość 3

5 Tablice (2) dr Paweł Drozda Tworzenie tablicy w C++  T nazwa[const rozmiar]; int tab[100]; char znaki[] = {‘x’, ’y’, ’z’}; Dostęp do elementów  indeksy: 0,…,N-1 tab[0] = 1; int x = tab[i]; Rozmiar tablicy musi być znany a priori (tablica statyczna)

6 Tablica – przykład dr Paweł Drozda #include int main() { int tab[4]; tab[0] = 12; tab[1] = 65; tab[2] = 44; tab[3] = 7; int suma = 0; for (int i=0; i<4; i++) { suma = suma + tab[i]; } std::cout << suma; return 0; } void usun (int tab, int p) { for (i=p; i

7 Tablice wielowymiarowe dr Paweł Drozda Deklaracja tablicy wielowymiarowej  T tab[N 1 ] [N 2 ]…[N k ]  można zapisać N 1 *N 2 *…*N k elementów w tablicy  Przykład int tab[2][2][2]; tab[][][]={{1,2,3},{- 1,4,3},{5,6,7},{7,6,5},{2,2,2}} Dostęp do elementów  poprzez indeksy n 1 n 2 …n k  Przykład – tablica dwuwymiarowa (macierz) tab[0][0]=1 tab[1][2]=5 #include int main() { int tab[10][10]; for (int i=0;i<9;i++) { for (int j=0;j<9;j++) { tab[i][j] = i*j; tab[j][i] = i*j; } std::cout << tab[4][7]; return 0; }

8 Stos dr Paweł Drozda dostęp tylko od wierzchołka zasada działania tzw. LIFO (Last In First Out) Dostępne dwie podstawowe funkcje:  PUSH(S,X) – umieszczenie elementu na stosie  POP(S) – zdjęcie elementu ze stosu Każdy element składa się z dwóch pól:  dane – dowolna zmienna  wskaźnik - zawiera informacje o miejscu przechowania kolejnego elementu na stosie Dodatkowy element:  Top – przechowuje wskaźnik do szczytu stosu Dodatkowe funkcje stosu:  przepełnienie - dla stosu o zadeklarowanej max wielkości  stos pusty – sprawdza czy stos nie jest pusty dane1 wskaźnik dane2 wskaźnik dane3 wskaźnik ogniwo Top …

9 Przykład – użycie stosu dr Paweł Drozda PUSTO 1 push(S,1) S push(S,5) push(S,3) pop(S) top(S) -> 5 pop(S) 5 3 -> 3 ->5

10 Implementacja stosu - wskaźniki dr Paweł Drozda void push (int x) { ELEMENT *q = new ELEMENT; if (top==NULL) { q->wartosc=x; top=q; } else{ q-> wartosc =x; q-> next=top; top=q; }

11 Stos jako tablica dr Paweł Drozda START, Wielkość stosu 6 top[S]=4 PUSH(S,4), PUSH(S,5) PUSH(S,7) – przepełnienie!! top[S]=6 top[S]=3 POP(S), POP(S), POP(S)

12 Stos jako tablica - implementacja dr Paweł Drozda int Pusty(S){ if (top(S)==0) return true; else return false; } void Push(S,x){ top(S)=top(S)+1; S[top(S)]=x; } Pop(S){ If Pusty(S) error „nie ma co zdjac”; else { top(S)--; return S[top(S)+1];} }

13 Kolejka dr Paweł Drozda Zasada działania – FIFO (First In First Out) Podstawowe funkcje:  ENQUEUE(Q,x) – dodanie elementu x do kolejki  DEQUEUE(Q) – zdjęcie elementu z kolejki Struktura elementu:  wartość elementu  wskaźnik do elementu następnego w kolejce Elementy dodatkowe  Head – przechowuje wskaźnik do początku kolejki  Tail – przechowuje wskaźnik do końca kolejki dane1 wskaźnik dane2 wskaźnik dane3 wskaźnik head tail

14 Przykład – użycie kolejki dr Paweł Drozda 2 Enqueue(Q,2) Enqueue(Q,5) Enqueue(Q,3) DEQUEUE(Q) HEAD(Q) -> 5 Dequeue(Q) 53

15 Implementacja kolejki dr Paweł Drozda void dequeue(Q){ if (head!=NULL) head=head->next; else error „nic nie ma w kolejce”; } void enqueue(Q, x){ ELEMENT *q= new ELEMENT; q->wartosc=x; tail->next=q; tail=q; }

16 Kolejka za pomocą tablicy dr Paweł Drozda START Head(Q)=4, Tail(Q)=7 ENQUEUE(Q,4), ENQUEUE(Q,1) DEQUEUE(Q), DEQUEUE(Q) Tail(Q)=2, Head(Q)=6 Tail(Q)=2, Head(Q)=4

17 Kolejka – implementacja tablicy dr Paweł Drozda void dequeue(Q){ x = Q[head(Q)]; If (head(Q)= length(Q)) head(Q)=1; else head(Q)++; return x; } void enqueue(Q,x){ if (tail(Q))==lenght(Q)) tail(Q)=1; else tail(Q)++; Q[tail(Q)]=x; }

18 Problem dr Paweł Drozda Jak za pomocą dwóch kolejek stworzyć stos? Jak za pomocą dwóch stosów stworzyć kolejkę? Kolejka 2 Kolejka 1

19 Listy (1) dr Paweł Drozda Struktura danych z elementami ułożonymi w liniowym porządku – porządek ustalony przez wskaźniki Element złożony:  lista jednokierunkowa: wartość i wskaźnik  lista dwukierunkowa wartość, dwa wskaźniki wartość następny wartość następny wartość NULL tail head Lista jednokierunkowa

20 Listy (2) dr Paweł Drozda Podstawowe funkcje  Search(L, x) – znajduje wskaźnik do elementu o kluczu x, bądź NULL gdy nie ma elementu z kluczem x  Insert (L, x, w) – wstawia element o kluczu x w miejscu wskazywanym przez w  Delete (L,w) – usuwa element wskazywany przez w  Min(L) – zwraca element o najmniejszym kluczu  Max(L) – zwraca element o największym kluczu wartość prev | next wartość prev | next wartość prev | next tail head Lista dwukierunkowa

21 Tworzenie listy dr Paweł Drozda 7/ 65/3 Head(L) Tail(L) Insert(L,3,Head) Insert(L,5,Tail) Insert(L,6,Tail) Insert(L,3,Tail) Search(L,5) Delete(L,Tail) Tail(L)

22 Lista jednokierunkowa dr Paweł Drozda Dodanie elementu pomiędzy dwa istniejące wartość następny wartość następny wartość NULL wartość następny

23 Listy - implementacja dr Paweł Drozda Search (L,x){ temp=head(L); while ((temp->next!=null) &&(temp->wartosc!=x)) temp=temp->next; return temp; } Insert(L,x){ // na koniec listy ELEMENT q = new ELEMENT; tail->next=q; tail=q; q->wartosc=x; }

24 Listy - własności Liniowe uporządkowanie elementów Elastyczność  wstawianie / usuwanie na dowolnej pozycji  dynamiczna długość Brak bezpośredniego dostępu do i-go elementu (O(n)) Dodatkowy koszt pamięciowy (wskaźniki)

25 Drzewa binarne (1) dr Paweł Drozda Węzeł reprezentowany za pomocą rekordów  klucz węzła  wskaźnik do ojca  wskaźnik do lewego syna  wskaźnik do prawego syna parent klucz leftright parent klucz leftright parent klucz leftright parent klucz leftright parent klucz leftright parent klucz leftright parent klucz leftright

26 Drzewo binarne (2) dr Paweł Drozda Oznaczenia  root(T) – wierzchołek korzenia – gdy wskaźnik parent wskazuje na NULL  leaf(T) – wierzchołek liścia – gdy wskaźniki left i right wskazują na NULL


Pobierz ppt "WYKŁAD 2 PROWADZĄCY: DR PAWEŁ DROZDA Algorytmy i Struktury Danych Struktury Danych."

Podobne prezentacje


Reklamy Google