Podstawy Informatyki. Wykład 6. Struktury danych

Podobne dokumenty
Podstawy Informatyki. Wykład 4. Struktury danych

Podstawy Informatyki. Struktura programu Stałe i zmienne. Wykład 4. Struktury danych

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

INFORMATYKA DANE.

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Wysokość drzewa Głębokość węzła

Struktury danych: stos, kolejka, lista, drzewo

Typy danych. 2. Dane liczbowe 2.1. Liczby całkowite ze znakiem i bez znaku: 32768, -165, ; 2.2. Liczby rzeczywiste stało i zmienno pozycyjne:

Programowanie obiektowe

ALGORYTMY I STRUKTURY DANYCH

Abstrakcyjne struktury danych - stos, lista, drzewo

Listy, kolejki, stosy

Programowanie obiektowe

Lista liniowa dwukierunkowa

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

ALGORYTMY I STRUKTURY DANYCH

Algorytmy i struktury danych. wykład 5

Podstawy Informatyki. Metalurgia, I rok. Wykład 3 Liczby w komputerze

Drzewa poszukiwań binarnych

Podstawy Informatyki. Metody dostępu do danych

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 >

Przykładowe B+ drzewo

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych

Tadeusz Pankowski

Grafy (3): drzewa. Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków. UTP Bydgoszcz

Wstęp do programowania

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

Teoretyczne podstawy informatyki

dr inż. Paweł Myszkowski Wykład nr 11 ( )

Definicja pliku kratowego

Wykłady z Matematyki Dyskretnej

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

INFORMATYKA. Podstawy programowania w języku C. (Wykład) Copyright (C) 2005 by Sergiusz Sienkowski IME Zielona Góra

Wykład X. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2016 Janusz Słupik

UNIWERSYTET GDAŃSKI MATERIAŁY DYDAKTYCZNE DO PRZEDMIOTU MATEMATYKA DYSKRETNA. pod redakcją: Hanna Furmańczyk Karol Horodecki Paweł Żyliński

Drzewo. Drzewo uporządkowane ma ponumerowanych (oznaczonych) następników. Drzewo uporządkowane składa się z węzłów, które zawierają następujące pola:

Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy

Dynamiczne struktury danych

PLAN WYKŁADU BAZY DANYCH INDEKSY - DEFINICJE. Indeksy jednopoziomowe Indeksy wielopoziomowe Indeksy z użyciem B-drzew i B + -drzew

Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST)

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

ZASADY PROGRAMOWANIA KOMPUTERÓW

Matematyka dyskretna - 7.Drzewa

dodatkowe operacje dla kopca binarnego: typu min oraz typu max:

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

Algorytmy i Struktury Danych


Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Podstawy Programowania C++

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

Wykład 2. Drzewa zbalansowane AVL i 2-3-4

Ogólne wiadomości o grafach

. Podstawy Programowania 2. Drzewa bst - część pierwsza. Arkadiusz Chrobot. 22 maja 2016

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

Podstawy programowania skrót z wykładów:

Porządek symetryczny: right(x)

Algorytm. Krótka historia algorytmów

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

Lab 9 Podstawy Programowania

Dynamiczny przydział pamięci (język C) Dynamiczne struktury danych. Sortowanie. Klasyfikacja algorytmów sortowania. Algorytmy sortowania

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Struktury Danych i Złożoność Obliczeniowa

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

Algorytm. Słowo algorytm pochodzi od perskiego matematyka Mohammed ibn Musa al-kowarizimi (Algorismus - łacina) z IX w. ne.

Teoretyczne podstawy informatyki

Drzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np.

Drzewa podstawowe poj

Każdy węzeł w drzewie posiada 3 pola: klucz, adres prawego potomka i adres lewego potomka. Pola zawierające adresy mogą być puste.

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel

Struktura danych. Sposób uporządkowania informacji w komputerze. Na strukturach danych operują algorytmy. Przykładowe struktury danych:

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5

Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303

Wykład 6. Drzewa poszukiwań binarnych (BST)

Algorytmy i Struktury Danych

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

0-0000, , , itd

Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.)

Podstawy Programowania

E: Rekonstrukcja ewolucji. Algorytmy filogenetyczne

PODSTAWY BAZ DANYCH Wykład 6 4. Metody Implementacji Baz Danych

Bazy danych - BD. Indeksy. Wykład przygotował: Robert Wrembel. BD wykład 7 (1)

Przypomnij sobie krótki wstęp do teorii grafów przedstawiony na początku semestru.

Podstawowe struktury danych

Wykład 1: Wskaźniki i zmienne dynamiczne

Wykład 8. Drzewa AVL i 2-3-4

Sortowanie. Bartman Jacek Algorytmy i struktury

Wstęp do programowania. Drzewa podstawowe techniki. Piotr Chrząstowski-Wachtel

DYNAMICZNE PRZYDZIELANIE PAMIECI

Typy danych, zmienne i tablice. Tomasz Borzyszkowski

Temat: Algorytm kompresji plików metodą Huffmana

Wykład 2. Drzewa poszukiwań binarnych (BST)

Wyznaczanie strategii w grach

Transkrypt:

Podstawy Informatyki Wykład 6 Struktury danych

Stałe i zmienne Podstawowymi obiektami występującymi w programie są stałe i zmienne. Ich znaczenie jest takie samo jak w matematyce. Stałe i zmienne muszą posiadać nazwę i posiadają przypisaną wartość. Nazwa jest ciągiem znaków, z których pierwszy musi być literą, np.: x, alfa1, pierwiastek1, Obowiązują tylko znaki ASCII (abc...z, ABC...XYZ). Nie ma polskich liter ani greckich. Charakter zmiennych jest deklarowany we wstępnej części programu (zazwyczaj zaraz na początku, przed instrukcjami właściwymi programu)

Zmienne są różnych typów: całkowite (integer): 1, 2, 128 rzeczywiste (real): 0.456, -734.129 logiczne (logical): true, false znakowe (character): imie, adres itp.

Tablice Tablica jest to struktura danych zawierająca uporządkowany zbiór obiektów tego samego typu i odpowiada matematycznemu pojęciu wektora, macierzy, zmiennych indeksowych, itp. 1 2 3 4 5 6 7 a S = a + 1 + a 2 +... a n

Typy danych Typ danych określa zbiór wartości, do którego należy obiekt Typy proste: liczbowe: całkowite, zmiennoprzecinkowe, w formacie dziesiętnym, dwójkowym, itp. znakowe: słowa zapisane w różnych alfabetach logiczne: prawda/fałsz Zmienne Służą do przechowywania w pamięci pojedynczych obiektów Odwoływanie się do zmiennych. Przykład: Niech X będzie zmienną całkowitą. wypisz(x); //wypisz wartość zmiennej X X -2; //przypisz zmiennej X wartość 2 X X + 5; //zwiększ wartość X o 5

Struktury danych W programowaniu struktura danych jest sposobem składowania danych na komputerze tak, by mogły być efektywnie wykorzystane. Często staranne dobranie struktury danych pozwala na zastosowanie wydajniejszego algorytmu. Przykładowe struktury danych to: rekord, zwany w niektórych językach po prostu strukturą tablica lista stos kolejka drzewo i jego liczne odmiany (np. drzewo binarne) graf

Struktury danych Struktura danych zbiór elementów. Każdy element składa się z jednego lub więcej części (słów maszynowych), zwanych polami. Przykład elementu struktury danych p1 Pole p1 jest wskaźnikiem (dowiązaniem) Pola,, dowolnego typu

Struktury danych TOP Wskaźnik (dowiązanie) podstawowy sposób reprezentowania złożonych struktur danych. Dowiązanie puste symbol Λ, symbol uziemienia Na pierwszą wartość wskazuje wartość zapisana w zmiennej TOP TOP to zmienna wskaźnikowa zmienna, której wartościami są wskaźniki (dowiązania). Wszystkie odwołania do elementów struktury odbywają się bezpośrednio przez zmienne (lub stałe) wskaźnikowe pośrednio przez pola elementów struktury zawierające wskaźniki

Listy liniowe Projekt reprezentacji struktury danych: zdefiniowanie informacji (danych), które będą przechowywane zdefiniowanie operacji wykonywanych na danych Wybór struktury danych zależy od powyższych czynników i determinuje funkcjonalność struktury. Lista liniowa ciąg n 0 elementów X[1], X[2],.., X[n], w którym względna pozycja elementu zdefiniowana jest w porządku liniowym. Dla n > 0 X[1] jest pierwszym elementem, X[n] ostatnim i jeśli 1 < k < n, to k-ty element X[k] leży za elementem X[k-1] i przed elementem X[k+1].

Listy Podstawowe operacje na liście: dostęp do k-tego elementu listy. Cel: odczyt lub modyfikacja zawartości pól elementu wstawianie nowego elementu przed lub po k-tym elemencie usuwanie k-tego elementu wyznaczenie liczby elementów listy znajdowanie elementu listy o zadanej wartości jednego z pól

Stos (ang. LIFO) lista liniowa, dla której operacje wstawiania i usuwania (oraz odczytu) elementu dotyczą tylko jednego końca listy Kolejka (ang. FIFO) lista liniowa, dla której operacje wstawiania dotyczą jednego końca, a operacje usuwania (i odczytu) drugiego końca Kolejka dwustronna lista liniowa, dla której wszystkie operacje wstawiania i usuwania (i odczytu) dotyczą dowolnego końca listy Wstawianie lub zdejmowanie wierzchołek Usuwanie pierwszy Kolejka Wstawianie ostatni Stos dno Wstawianie lub usuwanie lewy Wstawianie lub usuwanie prawy Kolejka dwustronna

Tablice jednowymiarowe (wektory) Służą do przechowywania w pamięci określonej (skończonej) liczby obiektów tego samego typu Przykład: 10-cio elementowa tablica liczb całkowitych o nazwie T indeks elementu w tablicy T 1 2 3 4 5 6 7 8 9 10-8 7-20 1 7 9-34 12 5 3 element tablicy T Odwołanie się do i-tego elementu tablicy T: T[i], np. wypisz(t[i]); //wypisz wartość i-tego elementu tablicy T T[i] 8; //i-temu elementowi tablicy T przypisz wartość 8

Tablice dwuwymiarowe (macierze) Służą do przechowywania w pamięci określonej (skończonej) liczby obiektów tego samego typu Przykład: Tablica o nazwie M, o 5-ciu wierszach i 10-ciu kolumnach i elementach całkowitych wiersz 1 2 3 4 5 1 2 3 4 5 6 7 8 9 10 27 kolumna element M[4][3] Odwołanie się do elementu o indeksie i i j tablicy M: M[i][j], np. wypisz(m[i][j]); //wypisz wartość elementu z wiersza i i kolumny j tablicy T M[i][j] 27; //elementowi tablicy M o indeksie i i j przypisz //wartość 27 Jeżeli n = m, gdzie n liczba wierszy, m liczba kolumn tablicy dwuwymiarowej, to tablicę nazywamy kwadratową. Przekątna główna tablicy kwadratowej: indeksy wiersza i kolumny są równe (i=j)

Tablice dwuwymiarowe cd. Każdą tablicę dwuwymiarową można przekształcić w tablicę jednowymiarową: Niech M tablica dwuwymiarowa o n wierszach i m kolumnach, T tablica jednowymiarowa o k = n*m elementach Wtedy i=1..n, j=1..m M[i][j] = T[m*(i-1)+j] Tablice wielowymiarowe Niech wymiar tablicy X będzie równy 3. Tablica tworzy wtedy prostopadłościan, a element jest wskazywany przez 3 indeksy: X[i][j][k] Wektor wektorów struktura złożona z wektora, którego elementy wskazują na wektory różnej długości. wskaźnik element element element... element element wskaźnik... wskaźnik element element element element element... element

Lista realizacja wskaźnikowa First Program wykorzystujący listę wskaźnikową musi pamiętać wskaźnik do pierwszego elementu listfirst.

Porównanie realizacji listy liniowej z wykorzystaniem tablicy i wskaźników Struktura ze wskaźnikami wymaga dodatkowego pola na przechowywanie wskaźnika. Operacja usunięcia elementu z listy jest prosta wymaga jedynie zmiany wskaźnika w odpowiednim elemencie. W przypadku sekwencyjnego przydziału pamięci operacja ta wymaga przemieszczenia całego fragmentu listy do innych lokacji pamięci. First Wstawianie elementu w środek listy wskaźnikowej jest prostą operacją. Wymaga zmiany wskaźników w dwóch elementach. First

Porównanie realizacji listy liniowej z wykorzystaniem tablicy i wskaźników cd. Odwołania do dowolnego elementu listy jest szybsze w przypadku tablic. Dostęp do k-tego elementu listy w postaci tablicy jest stały, dla listy wskaźnikowej wymaga k przejść po wskaźnikach. Operacja łączenia list wskaźnikowych jest prostsza niż list przy użyciu tablic. Lista wskaźnikowa umożliwia budowę skomplikowanych struktur, np. zmienna liczba list o zmiennej długości: element listy głównej jest wskaźnikiem do listy podrzędnej, lub elementy struktury mają wiele dowiązań i połączone są równocześnie w różnych porządkach, odpowiadając różnym listom. Operacje przeglądania kolejnych elementów listy są szybsze dla list sekwencyjnych. Do tworzenia listy wskaźnikowej niezbędny jest mechanizm przydzielania, zwalniania, sprawdzania, czy można pamięć przydzielić, czyli gospodarowania pamięcią. Sterta zbiór wszystkich elementów przeznaczonych do dynamicznego przydzielania. Uwaga: Zakłada się, że element listy ma postać: info link

Stos realizacja poprzez listę wskaźnikową. Zmienna wskaźnikowa T wskazuje na wierzchołek stosu. T=Λ stos pusty Włożenie informacji Y na stos T (wykorzystanie dodatkowej zmiennej wskaźnikowej P): P new (element); info(p) Y; link(p) T; T P; T Przypisanie informacji do Y z wierzchołka stosu i zdjęcie ze stosu tej informacji: jeśli T =Λ to niedomiar; wpp{ P T; T link(p); Y info(p); delete(p); }

Kolejka realizacja poprzez listę wskaźnikową. Kolejka pusta: F=Λ i R=Add(F); F R Operacja wstawiania nowego elementu do kolejki: P new(element); info(p) Y; F link(p) Λ; link(r) P; R P; Operacja usuwania elementu z kolejki: jeśli F=Λ to niedomiar; wpp{ P F; F link(p); Y info(p); delete(p); F jeśli F=Λ to R=Add(F);} P, nowy element R R

Lista cykliczna ostatni element listy wskazuje na pierwszy element. PTR Podstawowe operacje na listach cyklicznych: PTR = Λ lista pusta Wstaw element Y z lewej strony: P new(element); info(p) Y; jeśli PTR=Λ to PTR link(p) P; wpp{ link(p) link(ptr); link(ptr) P; } Usuń z listy lewy element: jeśli PTR=Λ to niedomiar wpp{ P link(ptr); Y info(p); link(ptr) link(p); jeśli PTR=P to PTR Λ; delete(p); Wstaw element Y z prawej strony: Wstaw Y z lewej strony; PTR P;

Drzewa Drzewo jest hierarchicznym ułożeniem danych. DEF. Drzewo jest to zbiór T jednego lub więcej elementów zwanych węzłami, takich że: 1. istnieje jeden wyróżniony węzeł zwany korzeniem drzewa 2. pozostałe węzły (bez korzenia) są podzielone na m 0 rozłącznych zbiorów T 1,.., T m, z których każdy jest drzewem. Drzewa T 1,.., T m są nazywane poddrzewami korzenia. Pierwszy obiekt zwany jest korzeniem, kolejne obiekty traktowane są jako jego potomstwo: węzły, liście węzły nie mające potomstwa. Droga w drzewie sekwencja węzłów w drzewie odpowiadających przejściu w kierunku od korzenia do liścia. węzeł korzeń Pojęcia: rodzic liść przodek potomek rodzeństwo (dwa węzły są rodzeństwem, gdy mają tego samego ojca) droga

Drzewa binarne Drzewo binarne jest skończonym zbiorem węzłów, który jest albo pusty, albo zawiera korzeń oraz dwa drzewa binarne. A T B C A B C D E D E F F Każdy węzeł przechowuje dwa wskaźniki: do lewego poddrzewa LLINK i prawego poddrzewa RLINK T jest wskaźnikiem do drzewa Jeśli T = Λ - drzewo puste Wpp T jest adresem korzenia drzewa, a LLINK(T) wskazuje lewe poddrzewo, RLINK(T) wskazuje prawe poddrzewo.

Przechodzenie drzewa Jest to systematyczne przeglądanie węzłów w taki sposób, ze każdy węzeł jest odwiedzony dokładnie jeden raz. Przejście drzewa wyznacza porządek liniowy w drzewie. Sposoby przechodzenia drzewa binarnego: preorder (porządek przedrostkowy) inorder (porządek wrostkowy) postorder (porządek przyrostkowy) Rekurencyjna definicja porządków przechodzenia drzewa binarnego: Jeśli drzewo jest puste, stop Wpp wykonaj: Przechodzenie preorder Przechodzenie inorder Odwiedź korzeń Przejdź lewe poddrzewo Przejdź lewe poddrzewo Przejdź prawe poddrzewo Odwiedź korzeń Przejdź prawe poddrzewo Przechodzenie postorder Przejdź lewe poddrzewo Przejdź prawe poddrzewo Odwiedź korzeń

Przykład: A B C D E F G H I Porządek preorder: A B D C E G F H I Porządek inorder: D B A E G C H F I Porządek postorder: D B G E H I F C A