Základní datové struktury.

Podobné dokumenty
Datové struktury a datové typy.

Dynamické datové struktury I.

Algoritmizace prostorových úloh

Dynamické datové struktury IV.

Algoritmizace prostorových úloh

Algoritmizace a programování

Booleovská algebra. Booleovské binární a unární funkce. Základní zákony.

Reprezentace dat v informačních systémech. Jaroslav Šmarda

Dynamické datové struktury III.

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

5 Přehled operátorů, příkazy, přetypování

Paměť počítače. alg2 1

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Algoritmizace a programování

ADT/ADS = abstraktní datové typy / struktury

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Datové typy strana 29

Základní datové struktury

Lineární datové struktury

Ukazka knihy z internetoveho knihkupectvi

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Da D to t v o é v ty t py IB111: Datové typy

Operátory. Základy programování 1 Tomáš Kühr

Struktura programu v době běhu

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Úvod do programovacích jazyků (Java)

NMIN102 Programování /2 Z, Zk

Elementární datové typy

Spojová implementace lineárních datových struktur

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Programovací jazyk Pascal

Datové typy a struktury

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

Programování v C++, 2. cvičení

Operátory. Základy programování 1 Martin Kauer (Tomáš Kühr)

Booleovská algebra. Pravdivostní tabulka. Karnaughova mapa. Booleovské n-krychle. Základní zákony. Unární a binární funkce. Podmínky.

Algoritmizace a programování

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Úvod do programování. Lekce 1

Čísla a číselné soustavy.

Racionální čísla, operátory, výrazy, knihovní funkce

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

IUJCE 07/08 Přednáška č. 6

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.

Programování v C++ 2, 4. cvičení

Java reprezentace dat, výrazy. A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Správa paměti. doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 /

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

Datové typy a jejich reprezentace v počítači.

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N

Racionální čísla, operátory, výrazy, knihovní funkce

Maturitní témata. IKT, školní rok 2017/18. 1 Struktura osobního počítače. 2 Operační systém. 3 Uživatelský software.

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

PŘETĚŽOVÁNÍ OPERÁTORŮ

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Konstruktory a destruktory

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Pointery II. Jan Hnilica Počítačové modelování 17

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

Zápis programu v jazyce C#

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Stromy, haldy, prioritní fronty

Formátové specifikace formátovací řetězce

Více o konstruktorech a destruktorech

Úvod do programovacích jazyků (Java)

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Teoretické minimum z PJV

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti.

6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

LEKCE 6. Operátory. V této lekci najdete:

Číselné soustavy v mikroprocesorové technice Mikroprocesorová technika a embedded systémy

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) b)

Základní datové struktury III: Stromy, haldy

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

POČÍTAČE A PROGRAMOVÁNÍ

8 Třídy, objekty, metody, předávání argumentů metod

Sada 1 - Základy programování

7. Datové typy v Javě

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

Transkript:

. Základní datové struktury. Odvozené datové struktury. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 1 / 45

Obsah přednášky 1 Datové struktury 2 Základní datové struktury Proměnná Pole Struktura Objekt 3 Odvozené datové struktury Seznam Zásobník Fronta Prioritní fronta Strom Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 2 / 45

Datové struktury 1. Datové struktury Data používaná programy v paměti uchovávána v datových strukturách. Data lze reprezentovat různými datovými typy. Pro efektivní práci s daty nutné zvolit vhodnou datovou strukturu a odpovídající datový typ. Dělení datových struktur: Datové struktury děleny do dvou kategorií: Základní datové struktury: Vyskytují se téměř ve všech programovacích jazycích. Za běhu programu nemění svůj rozsah. Odvozené datové struktury: Nazývány jako abstraktní datové struktury. Často implementovány jako objekty. Za běhu programu mohou měnit svůj rozsah. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 3 / 45

Datové struktury 10. Dělení datových struktur Dělení do dvou skupin: Základní datové struktury: Proměnná (Variable). Pole (Array). Struktura (Structure). Objekt (Object). Odvozené datové struktury: Seznam (List). Strom (Tree). Zásobník (Stack). Fronta (Query). Tabulka (Table). Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 4 / 45

Proměnná 11. Proměnná Pojmenované místo v paměti počítače. Je v ní uložena hodnota určitého datového typu. Deklarace proměnné: Proměnné vytvářeny pomocí deklarace. V deklaraci uveden datový typ proměnné a její identifikátor. int i; double k; Typ proměnné: Specifikace typu proměnné ovlivňuje: A) Určuje množinu hodnot, kterých proměnná může nabývat. B) Množství paměti potřebné pro její uložení. C) Operace, které lze s proměnnou provádět. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 5 / 45

12. Schéma paměti Základní datové struktury Proměnná 3 GB Allocated Free, reserved Allocated HEAP Free, reserved Applications Extended Allocated Memory Unalocated memory 1 MB Upper Memory BIOS, Video 640 kb STACK Allocated Conventional OS Memory. Applications Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 6 / 45

Proměnná 13. Alokace paměti Způsob, jakým je proměnným přidělován pamět ový prostor v RAM. 3 metody alokace paměti Statická alokace. Alokace na zásobníku. Alokace na haldě. Statická alokace paměti: Pamět přidělena pevně na celou dobu běhu programu. Přidělování paměti realizováno již v době překladu. Rozsah datových struktur musí být znám již v době překladu, což není vždy možné. Práce s proměnnými velmi rychlá a efektivní. Používáno pro proměnné deklarované v hlavním programu. double x; int cislo; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 7 / 45

Proměnná 14. Alokace na zásobníku Zásobník (Stack). Používána pro lokální proměnné, které jsou deklarovány v procedurách či funkcích či při rekurzi. Pamět je alokována při volání procedury/funkce, po jejím ukončení je uvolněna. Lokální proměnné zanikají, jejich hodnoty jsou nedostupné. Dochází k úspoře paměti, nepotřebné proměnné nezabírají místo. Uvolňování úseků paměti prováděno v opačném pořadí než jejich přidělování. Nedochází ke fragmentaci paměti. Nejrychlejší... Při překročení kapacity zásobníku chyba Stack Overflow. double dist(double a, double b) { } double d=math.sqrt(a*a+b*b); return d; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 8 / 45

Proměnná 15. Dynamická alokace paměti Dynamická alokace na haldě (Heap, realizován binárním stromem): Pamět přidělována na žádost programu operačním systémem, nikoliv kompilátorem. Na tyto úseky se odkazujeme pomocí speciálních proměnných typu ukazatel (pointer). Nepotřebná pamět není uvolňována implicitně, musí provést uživatel či Garbage Collector. Uvolňování úseků paměti nemusí být prováděno v opačném pořadí než její přidělování, dochází k fragmentaci paměti. Při překročení kapacity haldy chyba Heap Overflow. Point p=new Point(100,100); Výhody dynamické alokace: Proměnné existují jen po dobu, kdy jsou potřeba. Možnost vytvářet dynamické datové struktury potřebné velikosti za běhu programu. Jejich velikost nemusí být známa v době překladu. Nevýhody dynamické alokace: Dynamicky alokované proměnné nemají svůj jednoznačný identifikátor, přístup prostřednictvím ukazatele. Pomalejší přístup k datům než u statické alokace. Riziko vzniku chyb, špatná dealokace paměti. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 9 / 45

Proměnná 16. Problémy při dynamické alokaci Důsledky nevhodné práce s dynamicky alokovanou pamětí: Přístup na nealokované místo v paměti Přepsání vlastních dat či havárie programu. Zpravidla vede k pádu nebo si přepsání vlastních dat. Přístup do uvolněné paměti Zpravidla vede k pádu programu. Neuvolnění paměti Při náročných výpočetních procesech může nastat nedostatek paměti vedoucí k pádu aplikace. Většinou se chyba nijak neprojeví. Operační systém po skončení běhu programu tuto pamět uvolní. Opakované uvolňování téže paměti Opakované volání destruktoru. Zpravidla vede k pádu aplikace. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 10 / 45

Proměnná 17. Druhy proměnných Proměnné se liší dle způsobu přidělování paměti: Globální proměnné: Vytvořeny při spuštění programu, zanikají po ukončení programu. Existují po celou dobu běhu programu. Nazývány jako statické proměnné. Lokální proměnné: Deklarované ve funkcí či procedurách. Vznikají v okamžiku volání procedury/funkce, zanikají při ukončení procedury/funkce. Existují pouze po dobu běhu procedury/funkce. Nazývány jako automatické proměnné, alokovány v zásobníku. Dynamické proměnné: Vznikají za běhu programu na základě provedené alokace paměti příkazem. Mohou zanikat automaticky nebo manuálně (příkazem). Nejsou vázány na procedury/funkce. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 11 / 45

Proměnná 18. Přiřazovací příkaz Přiřazuje proměnné hodnotu odpovídajícího datového typu. Dochází k inicializaci hodnoty proměnné. i = 10; k = 13; Proměnné vystupují: v aritmetických operacích (výrazy) dist = sqrt((xb - xa) * (xb - xa) + (yb - ya) * (yb - ya)); v logických operacích (podmínky) if (eps > 0) předávány jako parametry funkcí či procedur distance (xa, ya, xb, ya); Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 12 / 45

19. Konstanty Základní datové struktury Proměnná Číselné údaje, jejichž hodnota se nemění. V praxi např. π, e, g, c, i. Konstanty celočíselné, reálné, znakové a řetězcové konstanty. Celočíselné konstanty: Celočíselné konstanty lze zapisovat v osmičkové, desítkové či šestnáctkové soustavě. Desítková soustava: 9234 Osmičková soustava: 0156 //Zacina nulou Šestnáctková soustava: 0x26AF //Zacina 0x Konstanty jsou standardně datového typu int. R = 123456; Hodnota typu long, za číselnou hodnotou symbol L. A = 12345678910L; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 13 / 45

20. Znakové konstanty Lze je zapsat následujícími způsoby. Proměnná Jedním znakem uzavřeným do apostrofů: A B C Číselnou hodnotou v ASCII tabulce (osmičková, šestnáctková soustava): \101 \102 \103 //osmickova \41 \42 \43 //sestnactkova Zápis speciálních znaků \n \r \\ \ Posloupností znaků \ uxxxx, kde XXXX představuje kód znaku v kódování UNICODE: \u000a Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 14 / 45

Proměnná 21. Reálné konstanty Lze je zapsat následujícími způsoby. S pevnou řádovou čárkou: 3.14159 9.80665 V semilogaritmickém tvaru 0.314159e-1 0.980665e-1 Reálná konstanta je standardně datového typu double. Zápis v datovém typu float, za poslední číslici umístěn znak F. A = 0.1e10F; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 15 / 45

22. Řetězcové konstanty Proměnná Zapisuje se jako posloupnost znaků uzavřená v uvozovkách. Pro tvorbu řetězcových konstant platí stejné zákonitosti jako pro tvorbu znakových konstant. Řetězcové konstanty mohou být na rozdíl od znakové konstanty tvořeny více než jedním znakem. Lze je zapsat následujícími způsoby. Jeden či více znaků do uvozovek (nikoliv do apostrofů). "Ahoj"; Hodnoty v ASCII/UNICODE tabulce: "Prvn\u00ED program\n v jazyce Java"; Sčítání řetězcových konstant prostřednictvím operátoru +. "prvni slovo"+"druhe slovo"; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 16 / 45

Proměnná 23. Přetypování Při přiřazovacích operacích dochází ke konverzím mezi různými datovými typy přetypování. Přiřazovaná hodnota (na pravé straně) je konvertována na typ proměnné jíž přiřazujeme (na levé straně). Výsledkem změna datového typu proměnné. Varianty přetypování: Přiřazení reálné hodnoty celočíselné celočíselné hodnotě: Hodnota zaokrouhlena odříznutím desetinné části (nedochází k zaokrouhlení podle standardních pravidel!) Přiřazení hodnoty s vyšší přesností do proměnné s nižší přesností: Pokud hodnota mimo rozsah výsledného datového typu, může vést k nedefinovatelnému výsledku Implicitní vs. explicitní přetypování. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 17 / 45

Proměnná 24. Implicitní a explicitní přetypování Implicitní přetypování Přetypování proměnné s nižším rozsahem na proměnnou s vyšším rozsahem. Probíhá automaticky, nedochází při ní ke ztrátě informací. Pořadí: byte->short->int->long->float->double. float a = 50; double b = 30; b = a;//implicitni konverze Explicitní přetypování Přetypování proměnné s vyšším rozsahem na proměnnou s nižším rozsahem. Neproběhne automaticky,nutno vynutit ji uvedením cílového datového typu. Dochází ke ztrátě informací. Pořadí: double->float->long->int->short->byte. a = b;//ztrata presnosti, nelze provest a = (float)b;//explicitni konverze Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 18 / 45

Proměnná 25. Smíšené konverze Nastávají, pokud do aritmetických operací vstupují operandy smíšeného typu. Cílem co nejmenší ztráta přesnosti při aritmetických operacích. Zákonitosti: A) Pokud je jeden z operandů typu double, bude výsledkem operace datový typ double. B) Pokud je jeden z operandů typu float, bude výsledkem operace datový typ float. C) Pokud je jeden z operandů typu long, bude výsledkem operace datový typ long. Pozor na zlomky: Správně: int a = 5;//int int b = 10;//int int c = a / b;//vysledek=0 int a = 5.0;//double int b = 10;//int int c = a / b;//vysledek=0.5; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 19 / 45

Proměnná 26. Aritmetické operátory Slouží k realizaci základních aritmetických operacích. Vyhodnocování z leva do prava dle priority: A) nejprve operace násobení/dělení/celočíselné dělení, B) poté se vyhodnotí zbývající operace. Změna priority vyhodnocování s použitím závorek. Počet pravých a levých závorek by měl být stejný. int a = 3 + 3 * 3;//a=12 int a = (3 + 3) * 3;//18 Přehled aritmetických operátorů: Operátor Popis + Sčítání - Odečítání * Násobení / Dělení % Zbytek po celočíselném dělení. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 20 / 45

27. Operátory přiřazení Proměnná Zkrácený zápis běžných aritmetických operací. Umožňuje efektivnější zápis aritmetických operací. Přehled operátorů přiřazení. Operátor a+=5 a-=5 a*=5 a/=5 Úplný zápis a=a+5 a=a-5 a=a*5 a=a/5 Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 21 / 45

Proměnná 28. Operátory inkrementace a dekrementace Zvyšování či snižování hodnoty proměnné o 1. Představují zdvojené operátory ++ resp.. Předcházející inkrementace/dekrementace: Operátory inkrementace/dekrementace umístěny před proměnnou. Nejprve se provede inkrementace/dekrementace, poté přiřazovací příkaz. int a = 5, b = 5; int c = ++a;//a = 6, c = 6; int d = --b;//b = 4, d = 4; Následná inkrementace/dekrementace: Operátory inkrementace/dekrementace umístěny za proměnnou. Nejprve se provede přiřazovací příkaz, poté inkrementace/dekrementace. int a = 5, b = 5; int c = a++;//a = 6, c = 5; int d = b--;//b = 4, d = 5; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 22 / 45

Proměnná 29. Relační operátory Použití při konstrukci logických podmínek. Binární i unární booleovské operátory. Různá priorita, nejvyšší negace, poté konjunkce, ostatní. Změna pořadí závorkami. Přehled relačních operátorů: Operátor Popis == Rovná se!= Nerovná se && Logický součin Logický součet! Negace < Menší > Větší <= Menší nebo rovno >= Větší nebo rovno Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 23 / 45

30. Pole Základní datové struktury Pole Posloupnost proměnných stejného typu uložených v paměti chápaných jako jeden celek. Každé pamět ové místo reprezentováno prvkem pole. K prvku pole přistupujeme prostřednictvím indexu, Index pole nesmí být překročen! Deklarace pole: Uváděn datový typ, identifikátor, počet prvků pole. Jednorozměrné pole: Prvky pole tvoří proměnné, nikoliv pole nějakého jiného pole. Představuje ho n prvků s indexy 0,..., n 1. double pole[10]; //deklarace pole s deseti prvky pole[0]; //prvni prvek pole pole[9]; //posledni prvek pole Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 24 / 45

31. Vícerozměrné pole Pole Pole označováno jako N-rozměrné. Prvky N-rozměrného pole tvoří prvky (N 1)-rozměrného pole. Nejčastěji používáno dvojrozměrné pole, N = 2. Prvky dvojrozměrného pole tvoří prvky jednorozměrného pole. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 25 / 45

32. Dvojrozměrné pole Pole Tvořeno m řádky a n sloupci, představuje matici. Řádkový index: 0,..., m 1. Sloupcový index: 0,..., n 1. Nejrychleji se mění poslední index, tj index nejvíce vpravo. Deklarace dvourozměrného pole: double pole[6][11]; //deklarace 2D pole 6x10 prvku pole[0][0]; //prvni prvek pole pole[5][10]; //posledni prvek pole Využití dvojrozměrných polí: reprezentace tabulek, rastrů. Pro práci s poli používány cykly (opakování činností). V některých jazycích pole deklarována jako dynamické proměnné. Operace s 1D neuspořádaným polem (přístup, hledání) jsou prováděny v lineárním čase, s 2D neuspořádaným polem v kvadratickém čase. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 26 / 45

Pole 33. Pole v Javě S polem v Javě pracujeme prostřednictvím odkazu (tj. podobně jako s objekty). 2 kroky: Deklarace odkazu na pole Ve tvaru datovy_typ [] identifikator. Neuvádíme počet prvků. double [] pole; S polem zatím nelze pracovat, nebyla alokována pamět vyvolání výjimky. Alokace paměti Vytvoření vlastního pole přidělení potřebné paměti, uvádíme počet prvků. Nastavení odkazu tak, aby ukazoval na vytvořené pole. pole=new double[10]; Oba kroky lze spojit do jednoho: double [] pole=new double[10]; Prvky pole celočíselného/ reálného typu automaticky inicializovány na hodotu 0, prvky polí odkazů (tj. referencí) inicializovány na hodnotu null. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 27 / 45

Pole 34. Ilustrace práce s polem v Javě double [] pole Adresa 30 31 32 56 57 58 Hodnota xxx xxx xxx xxx xxx xxx pole=new double[3] pole[0] pole[1] pole[2] Adresa 30 31 32 56 57 58 Hodnota 56 xxx xxx 0 0 0 Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 28 / 45

Pole 35. Další operace s polem v Javě Délka pole: Představuje počet prvů, lze zjistit prostřednictvím length. pole.length; Hodnota length-1 je nastavována jako nejvyšší horní index pole. pole[pole.length-1]; //Posledni prvek pole pole[pole.length]; //Prekrocen index, prace s nealokovanou Inicializované pole: Pole inicializované předem danými hodnotami, nepoužívá se konstrukce s new (pouze konvence). double [] pole={2.0, 4.4,17.85}; //1D pole double [][] pole2d={{2.0, 4.4},{17.85, 0.3}, {10.9, 6.4}}; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 29 / 45

36. Kopírování polí v Javě Pole Nelze použít přiřazovací příkaz, provádí kopírování odkazů, nikoliv kopírování skutečného obsahu polí. int [] pole1={1,2,3}; int [] pole2=new int [3]; pole2=pole1;//zkopirovani odkazu, nikoliv obsahu pole! Kopírování obsahu pole po prvku int [] pole1={1,2,3}; int [] pole2=new int [3]; for (int i=0;i<pole1.length;i++) pole2[i]=pole1[i]; Použití příkazu arraycopy arraycopy(zdroj,pocat_index,cil,cilovy_index,pocet_prvku); Ukázka kopie dvou polí int [] pole1={1,2,3}; int [] pole2=new int [3]; System.arraycopy(pole1,0,pole2,0,pole1.length); Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 30 / 45

37. Ukázka nevhodného kopírování polí Pole int [] pole1={1,2,3}; pole1[0] pole1[1] pole1[2] Adresa 30 31 32 56 57 58 59 Hodnota 56 xxx xxx 1 2 3 xxx int [] pole2=new int[3]; pole2[0] pole2[1] pole2[2] Adresa 40 41 42 105 106 107 109 Hodnota 105 xxx xxx 0 0 0 xxx pole[2]=pole1 pole2[0] pole2[1] pole2[2] Adresa 40 41 42 105 106 107 109 Hodnota 105 xxx xxx 0 0 0 xxx Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 31 / 45

Pole 38. Ukázka správného kopírování polí int [] pole1={1,2,3}; pole1[0] pole1[1] pole1[2] Adresa 30 31 32 56 57 58 Hodnota 56 xxx xxx 1 2 3 int [] pole2=new int[3]; pole2[0] pole2[1] pole2[2] Adresa 40 41 42 105 106 107 Hodnota 105 xxx xxx 0 0 0 arraycopy(pole1,0,pole2,0,pole1.length); pole2[0] pole2[1] pole2[2] Adresa 40 41 42 105 106 Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 32 / 45 107

39. Struktura (Záznam) Struktura Skupina proměnných různých typů, které se dohromady chovají jako celek. Na rozdíl od pole se jedná o strukturu heterogenní. Deklarace struktury: Jednotlivé položky struktury deklarovány jako samostatné proměnné. struct Point { double x, y; //Bod ma souradnice x,y }; //Ukoncena strednikem Při práci se strukturami je používán princip kvalifikace. Nejprve vytvořena proměnná datového typu struktury. Pro přístup k jednotlivým složkám struktury používáme proměnnou datového typu struktury doplněnou jménem proměnné. Point p; //Promenna typu point p.x=1024768.57; //nastaveni souradnice x p.y=800000.33; //Nastaveni souradnice y Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 33 / 45

Objekt 40. Objekt V objektově orientovaném programování objekty představují komponenty nehmotného charakteru. Jsou abstrakcí a zjednodušením svých hmotných protějšků. Vykazují určité vlastnosti a chování. Rozhraní objektu: umožňuje vzájemnou komunikaci objektů. Podrobnosti v kapitole věnované OOP. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 34 / 45

41. Rozhraní objektu Základní datové struktury Objekt Objekt tvořen: Datovou strukturou Představována proměnnými různých datových typů. Ovlivňuje vlastnosti objektu. Tato část objektu bývá označována jako soukromá, z vnějšku je před jinými objekty ukryta (princip zapouzdření). Metodami Definují operace, které je možno s daty provádět. Určují chování objektu. Tato část objektu bývá označována jako veřejná. Patří mezi dynamické proměnné: vytvářeny a rušeny na pokyn programátora v libovolný okamžik. S dynamicky vytvořenými objekty pracujeme ve speciální části paměti zvané halda (heap). Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 35 / 45

Odvozené datové struktury Seznam 42. Seznam Datová struktura, tvoří ji uspořádaná posloupnost položek. Položky uspořádány podle určité hodnoty, tzv. klíče. Jednotlivé položky nemusejí být umístěny přímo za sebou každá položka obsahuje odkaz na následující položku. Patří mezi rekurzivní struktury, každá položka obsahuje odkaz na položku stejného typu. Vlastnost seznamu: Rychlé přidávání prvků na počátek/konec seznamu (O(N)). Vhodný pro procházení prvků popořadě sekvenční uspořádání dat. Nevhodný pro náhodný přístup k prvkům. Typy seznamů: Jednosměrný seznam Obousměrný seznam Kruhový seznam Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 36 / 45

Odvozené datové struktury 43. Ukázky seznamů. Seznam Jednosměrný seznam: každý prvek seznamu odkazuje na předchozí resp. následující prvek seznamu. První resp. poslední prvek seznamu neodkazuje nikam (NULL). Obousměrný seznam: každý prvek seznamu obsahuje odkaz na předchozí a následující prvek seznamu. První a poslední prvek seznamu neodkazují nikam (NULL). Kruhový seznam: jednosměrný i obousměrný. Poslední prvek seznamu pak obsahuje odkaz na první prvek seznamu, resp. první prvek seznamu obsahuje odkaz na poslední prvek seznamu. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 37 / 45

Odvozené datové struktury Zásobník 44. Zásobník Ze zásobníku odebíráme data v opačném pořadí, než v jakém jsme je do něj uložili. Pracovat lze pouze s prvkem, který je na vrcholu zásobníku. Reprezentuje model LIFO (Last In - First Out). V běžném životě model zásobníku např. batoh, vyndaváme z něj věci v opačném pořadí, než je do něj ukládáme. Použití při zpracovávání dat v sekvenčním pořadí. Dno zásobníku: Nejspodnější prvek v zásobníku. Přidán do zásobníku jako první. Vrchol zásobníku: Nejvrchnější prvek v zásobníku. Přidán do zásobníku jako poslední. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 38 / 45

Odvozené datové struktury 45. Ukázka zásobníku Zásobník Použití: náhrada rekurze, vyhodnocování výrazů... Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 39 / 45

Odvozené datové struktury Fronta 46. Fronta Z fronty odebíráme data ve stejném pořadí, v jakém jsem je do ní uložili. Pracovat lze pouze s prvkem, který je na čele fronty. Reprezentuje model FIFO (First In-First Out). Využití při sekvenčním zpracování dat. Ve frontě nemůžeme předbíhat. Existuje i fronta s předbíháním, tzv. prioritní fronta. Konec fronty: Prvek na poslední pozici ve frontě. Do fronty přidán jako poslední. Čelo fronty: Prvek na první pozici ve frontě, Do fronty přidán jako první. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 40 / 45

Odvozené datové struktury Fronta 47. Ukázka fronty a kruhové fronty Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 41 / 45

Odvozené datové struktury Prioritní fronta 48. Prioritní fronta Nazývána fronta s předbíháním. Charakteristika prioritní fronty: Varianta fronty, u které hraje roli ohodnocení prvku. Ohodnocení realizováno ohodnocovací funkcí. Prvek s vyšší prioritou může přeběhnout prvek s nižší prioritou. Princip prioritní fronty: 1 Prvky přidávány do fronty v pořadí, v jakém jsou na vstupu. 2 Prvky odebírány z fronty na základě ohodnocení (priority prvku). Prvky s nejvyšší prioritou odebrány jako první. Časté použití v geoinformatice, souvislost s technikou Sweep Line (zametací přímka). Ohodnocením např. souřadnice x, y, vzdálenost, váha, atd. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 42 / 45

Odvozené datové struktury Strom 49. Strom Takové uspořádání dat, kdy každý prvek má nejvýše jednoho předchůdce a může mít více než jednoho následníka. Strom tvořen vrcholy (uzly). Typy uzlů: Listy: Uzly bez následníka. Není k nim připojen žádný podstrom. Kořen: Uzel bez předchůdce=kořen. Existuje právě 1. Vnitřní uzly: Uzly, které nejsou listem ani kořenem. Patří mezi rekurzivní datové struktury: každý uzel je současně kořenem stromu a zároveň listem stromu vyšší úrovně. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 43 / 45

50. Dělení stromů Odvozené datové struktury Strom Podle maximálního počtu potomků, stupeň uzlu n. Unární strom: n = 1 (Seznam). Binární strom: n = 2. Ternární strom: n = 3. Stromy vyšších řádů se zpravidla nepoužívají. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 44 / 45

Odvozené datové struktury Strom 51. Uspořádání dat v binárním stromu Pro každý uzel U platí, že všechny údaje v levém podstromu jsou menší než U a všechny údaje v pravém podstromu větší než U. Tato organizace umožňuje efektivní práci s daty uloženými ve stromu: např. vyhledávání se složitostí O(log(N)). Ukázka binárního stromu. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky datové struktury. a kartografie, Přírodovědecká fakulta UK.) 45 / 45