Algorytmy i Struktury Danych Struktury Danych

Slides:



Advertisements
Podobne prezentacje
ALGORYTMY I STRUKTURY DANYCH
Advertisements

Tablice 1. Deklaracja tablicy
PRAM.
STRUKTURY DANYCH.
Algorytmy sortowania i porządkowania
Algorytmy sortowania i przeszukiwania
Algorytmy – c.d. złożoność algorytmów struktury danych
Algorytmy – c.d. struktury danych złożoność algorytmów
Klasa listy jednokierunkowej Przekazywanie parametrów do funkcji
Standardowa biblioteka języka C++
Wskaźniki repetytorium Wskaźniki int Y = 1, X = 2; X = 5; int *p = &X; Y X p 4 4 p = &Y; *p = 4; 5.
Zaawansowane techniki algorytmiczne
Haszowanie Jakub Radoszewski.
Wzorce.
Dynamiczne struktury danych Listy, Kolejki, Stosy
Grażyna Mirkowska PJWSTK 15 listopad 2000
Język ANSI C Funkcje Wykład: Programowanie komputerów
Wykład 10 Metody Analizy Programów Specyfikacja Struktur Danych
PROGRAMOWANIE STRUKTURALNE
Elementarne struktury danych Piotr Prokopowicz
pseudokody algorytmów
ALGORYTMY GEOMETRYCZNE.
Zakres i zasięg deklaracji Zakres : obszar programu, w którym identyfikator może być użyty zakres globalny : cały program zakres lokalny : definicja pojedynczej.
Model danych oparty na listach
Dynamiczne struktury danych 1
Wykład 1: Wskaźniki Podstawy programowania Programowanie w C
Analiza kosztu zamortyzowanego
dr Anna Kwiatkowska Instytut Informatyki
Typy wskaźnikowe, dynamiczne struktury danych
Podstawy programowania II
Algorytmy i struktury danych
Podstawy programowania
Podstawy programowania II
Algorytmy i Struktury Danych Sortowanie
Operacje na strukturach listowych
Algorytmy i Struktury Danych Typy algorytmów
TABLICE C++.
Łódź, 3 października 2013 r. Katedra Analizy Nieliniowej, WMiI UŁ Podstawy Programowania Złożona składnia języka C++
Listy, stosy i kolejki..
Złożone typy danych Listy Tworzenie elastycznych baz danych
Podstawy programowania w języku C i C++
Rodzaje, przechodzenie grafu
C# Platforma .NET CZ.3 Kuba Ostrowski.
Dynamiczne struktury danych
Algorytmy i Struktury Danych
Algorytmy i Struktury Danych
ALGORYTMY I STRUKTURY DANYCH WYKŁAD 04 k-ty co do wielkości. Stosy Grażyna Mirkowska PJWSTK, ITN semestr letni 2002.
Algorytmy i Struktury Danych Drzewa BTS, AVL
Tablice Zajęcia 8. Definicja Tablica (z ang. array) jest zmienną złożoną, która składa się z ciągu elementów tego samego typu. W pamięci komputera tablica.
Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2006/ /11/2006Prof. dr hab. Elżbieta Richter-Wąs Wykład 6 Model danych oparty.
Podstawy informatyki Tablice Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
INFORMATYKA DANE
Zbiory dynamiczne.
ALGORYTMY I STRUKTURY DANYCH
STOS. STL (ang. Standard Template Library) jest to biblioteka zawierająca algorytmy, pojemniki, iteratory oraz inne konstrukcje w formie szablonów, gotowe.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
Indeksy drzewiaste. ISAM ISAM - INDEXED SEQUENTIAL ACCESS METHOD Problem: –Dany jest plik uporządkowany – w jaki sposób zrealizować efektywnie zapytanie.
Typy wyliczeniowe, kolekcje
Listy.
Programowanie Obiektowe – Wykład 5
Kolejka priorytetowa.
Drzewa.
Wskaźniki Elżbieta Labocha.
Algorytmy i struktury danych
Dane, zmienne, instrukcje
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Zapis prezentacji:

Algorytmy i Struktury Danych Struktury Danych Wykład 2 Prowadzący: dr Paweł Drozda

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

Struktury danych – po co? 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 dr Paweł Drozda

Tablice (1) 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 1 2 3 4 5 6 7 8 9 11 13 17 19 23 element tablicy o indeksie 2, zawierający wartość 3 dr Paweł Drozda

Tablice (2) Tworzenie tablicy w C++ Dostęp do elementów 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) dr Paweł Drozda

Tablica – przykład void usun (int tab, int p) { #include <iostream> 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<length(tab); i++) tab[i]=tab[i+1]; } void wstaw(int tab, int p, int x) tab[p]=x; void wstaw1 (int tab, int p, int x) for () dr Paweł Drozda

Tablice wielowymiarowe Deklaracja tablicy wielowymiarowej T tab[N1] [N2]…[Nk] można zapisać N1 *N2*…*Nk 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 n1 n2…nk Przykład – tablica dwuwymiarowa (macierz) tab[0][0]=1 tab[1][2]=5 #include <iostream> 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; dr Paweł Drozda

Stos Każdy element składa się z dwóch pól: Dodatkowy element: 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 dane3 wskaźnik Top dane2 wskaźnik ogniwo dane1 wskaźnik … dr Paweł Drozda

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

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

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

Stos jako tablica - implementacja 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];} dr Paweł Drozda

Kolejka 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 head tail dane1 wskaźnik dane2 wskaźnik dane3 wskaźnik dr Paweł Drozda

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

Implementacja kolejki 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; dr Paweł Drozda

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

Kolejka – implementacja tablicy 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; dr Paweł Drozda

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

Listy (1) 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 head tail Lista jednokierunkowa wartość następny wartość następny wartość NULL dr Paweł Drozda

Listy (2) 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 head tail Lista dwukierunkowa wartość prev | next wartość prev | next wartość prev | next dr Paweł Drozda

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

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

Listy - implementacja 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; dr Paweł Drozda

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)

Drzewa binarne (1) 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 left right parent klucz left right parent klucz left right parent klucz left right parent klucz left right parent klucz left right parent klucz left right dr Paweł Drozda

Drzewo binarne (2) 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 dr Paweł Drozda