Datové struktury a datové typy. Základní datové typy. Odvozené datové typy. 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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 1 / 53
Obsah přednášky 1 Základní datové typy 2 Datové struktury 3 Základní datové struktury Proměnná Pole Struktura Objekt 4 Odvozené datové struktury Seznam Zásobník Fronta Prioritní fronta Strom Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 2 / 53
Základní datové typy 1. Základní datové typy Přehled základních datových typů: celočíselné, logické, reálné a znakové. Nalezneme prakticky ve všech programovacích jazycích. U každého jednoduchého datového typu definována jeho velikost v bajtech a rozsah. Vyjádření v různých číselných soustavách: dvojková (binární) soustava: 0011, desítková (decimální) soustava (znaky 0-9): 1987, šestnáctková (hexadecimální) soustava (znaky 0-9, a-f): 16af. Celočíselné datové typy: Reprezentace diskrétních jevů. Se znaménky (signed) či bez znaménka (unsigned). Liší se rozsahem a přesností. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 3 / 53
Základní datové typy 2. Přehled celočíselných datových typů v Javě Rozsah představován maximální a minimální hodnotou, které může proměnná tohoto datového typu nabývat. Závisí na počtu bitů které jsou použity na uložení číselné hodnoty v paměti. Unsigned: (0, 2 n 1). Signed ( 2 n 1, 2 n 1 1). Pokud nevíme, jaký datový typ použít, a nemáme nějaké speciální požadavky, zpravidla používáme typ int. Datový typ Velikost Rozsah byte 8b -128;127 short 16b -32768;32767 int 32b -2E09;2E09 long 64b -9E18;9E18 Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 4 / 53
3. Znakový typ Základní datové typy Datový typ char. Používán pro práci se znaky, různá kódování a sady znaků. Má vlastnosti celočíselného datového typu bez znaménka, jeho hodnota odpovídá kódu příslušného znaku v ASCII tabulce. Na jednotlivé znaky se lze dívat jako na celá čísla, lze na ně aplikovat stejné aritmetické či relační operátory jako na datový typ int. Nabývá hodnot (0, 2 8 1). Zápis znakového typu: znakem uzavřeným do apostrofů: char c='a'; prostřednictvím escape sekvencí: char c='\n'; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 5 / 53
Základní datové typy 4. Kódování ASCII (American Standard Code for Information Interchange): 127 znaků (písmena, číslice, spec. znaky), 7b + 1b. Problémy s ČJ, celkem 6 speciálních kódování: CP 1250, ISO 8859-2, Latin 2... UNICODE: 16b kódování, 2 nástupce ASCII, 1 114 112 znaků, např. UTF-8. Ukázka Escape sekvencí: Escape sekvence UNICODE Význam \n \u000a Nová řádka \r \u000d Návrat na začátek řádku \t \u0009 Tabulátor \\ \u005c Zpětné lomítko \' \u002c Apostrof \" \u0022 Uvozovky Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 6 / 53
5. ASCII tabulka Základní datové typy Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 7 / 53
Základní datové typy 6. Logický datový typ Datový typ bool, (v Javě boolean). Nabývá dvou hodnot: pravda true, nepravda false. Obě hodnoty lze vyjádřit prostřednictvím celočíselných hodnot: Příklad: 1=true 0=false. boolean result=false; boolean result=0; Uplatňuje se zejména při konstrukci logických podmínek. if (result==true) if (result) Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 8 / 53
Základní datové typy 7. Reálné datové typy Reálná čísla R které lze vyjádřit nekonečně dlouhým desetinným rozvojem, jsou představována desetinnými čísly. Používána pro vyjádření spojitých jevů. Výpočty v pomalejší než nad celými čísly. Důležitá volba správného datového typu. Zápis reálných čísel: 2 formy zápisu. S pevnou řádovou čárkou (Fixed-point). Proměnná relativní chyba, malá čísla zatížena větší chybou. 123.456 10.0 V semilogaritmickém tvaru (Floating-point). Příliš malá nebo příliš velká čísla, stejná relativní chyba. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 9 / 53
Základní datové typy 8. Reálné datové typy v Javě Pro vědecké výpočty používáme datový typ double (s dvojnásobnou přesností). Při výpočtu s datovým typem float dochází k značným zaokrouhlovacím chybám. float: 7 platných desetinných míst double: 15 platných desetinných míst Datový typ Velikost Rozsah float 32b -1.4E45;3.4E48 double 64b -4.9E-324,1.7E308; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 10 / 53
Datové struktury 9. 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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 11 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 12 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 13 / 53
12. Schéma paměti Základní datové struktury Proměnná Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 14 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 15 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 16 / 53
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. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 17 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 18 / 53
17. Druhy proměnných Proměnná 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áš Alokovány Bayer bayertom@natur.cuni.cz heapu. (Katedra aplikované Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 19 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 20 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 21 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 22 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 23 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 24 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 25 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 26 / 53
25. Smíšené konverze Proměnná 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: int a = 5;//int int b = 10;//int int c = a / b;//vysledek=0 Správně: int a = 5.0;//double int b = 10;//int Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 27 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 28 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 29 / 53
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=5; int d = --b;//b=4, d=5; 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=6; int d = b--;//b=4, d=4; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 30 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 31 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 32 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 33 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 34 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 35 / 53
Pole 34. Ilustrace práce s polem v Javě Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 36 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 37 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 38 / 53
37. Ukázka nevhodného kopírování polí Pole Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 39 / 53
38. Ukázka správného kopírování polí Pole Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 40 / 53
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; }; //Ukoncena strednikem //Bod ma souradnice x,y 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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 41 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 42 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 43 / 53
42. Seznam Odvozené datové struktury 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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 44 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 45 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 46 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 47 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 48 / 53
Odvozené datové struktury Fronta 47. Ukázka fronty a kruhové fronty Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 49 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 50 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 51 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 52 / 53
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é Datové struktury geoinformatiky a datové a kartografie, typy. Přírodovědecká fakulta UK.) 53 / 53