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

Podobné dokumenty
Algoritmy II. Otázky k průběžnému testu znalostí

Lineární datové struktury

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

Základní datové struktury

Binární vyhledávací stromy II

Dynamická alokace paměti

Hašování. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13.

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

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.

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Dynamické datové struktury I.

Abstraktní datové typy

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

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Programování II. Návrh programu I 2018/19

Lineární spojový seznam (úvod do dynamických datových struktur)

Konstruktory a destruktory

Lineární datové struktury

2 Datové struktury. Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky

Dynamické datové struktury IV.

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

Rekurze. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

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

Mělká a hluboká kopie

Martin Flusser. December 15, 2016

Část I Spojové struktury

Základy programování (IZP)

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Vyhledávání v textu. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

Dynamické datové struktury III.

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

Spojové struktury. Jan Faigl. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 10 A0B36PR1 Programování 1

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

Kolekce, cyklus foreach

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

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

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) 28. prosince Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Složitost algoritmů. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

Úvod do programovacích jazyků (Java)

Rekurzivní algoritmy

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

DSA, První krok: máme dokázat, že pro left = right vrátí volání f(array, elem, left, right)

Algoritmizace a programování

Grafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13.

ADT/ADS = abstraktní datové typy / struktury

Maturitní téma: Programovací jazyk JAVA

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

NMIN102 Programování /2 Z, Zk

Stromy. Jan Hnilica Počítačové modelování 14

Algoritmy a datové struktury

Architektura COM. Historie Component Object Model (COM) Komunikace s komponentami Rozhraní komponent COM komponenty v.net.

Dynamické datové typy a struktury

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

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

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

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

Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39

Základy programování (IZP)

Základy programování (IZP)

PA152. Implementace databázových systémů

Složitosti základních operací B + stromu

O datových typech a jejich kontrole

Ukazatele, dynamická alokace

Základy programování 2 KMI/ZP2

Abstraktní třídy, polymorfní struktury

Datové struktury. alg12 1

Programování v jazyce C a C++

Třetí skupina zadání projektů do předmětu Algoritmy II, letní semestr 2017/2018

Volné stromy. Úvod do programování. Kořenové stromy a seřazené stromy. Volné stromy

Druhá skupina zadání projektů do předmětu Algoritmy II, letní semestr 2014/2015

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

Strukturované typy a ukazatele. Úvod do programování 1 Tomáš Kühr

PB071 Programování v jazyce C Jaro 2013

bfs, dfs, fronta, zásobník, prioritní fronta, halda

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

Datové struktury 2: Rozptylovací tabulky

Více o konstruktorech a destruktorech

PB161 Programování v jazyce C++ Přednáška 4

OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PŘÍKLADECH 8 Proudová knihovna 8.1 Hierarchie proudů Standardně zavedené proudy

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Anotace. Pointery. Martin Pergel,

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

Pojem algoritmus. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

Šablony, kontejnery a iterátory

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

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

Třídy a struktury v C++

Pole a kolekce. v C#, Javě a C++

ABSTRAKTNÍ DATOVÉ TYPY

Zadání k 2. programovacímu testu

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

Pokročilé haldy. prof. Ing. Pavel Tvrdík CSc. Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010

Jazyk C++ II. STL knihovna kontejnery část 2

Programování II. Třídy a objekty (objektová orientovanost) 2018/19

KTE / ZPE Informační technologie

Algoritmy výpočetní geometrie

Amortizovaná složitost. Prioritní fronty, haldy (binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá:

Datové struktury 1: Základní datové struktury

Transkript:

Spojová implementace lineárních datových struktur doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB TUO) Spojová implementace lineárních datových struktur 94 / 312

Osnova přednášky Spojová implementace lineárních datových struktur Dynamická implementace seznamu Jiří Dvorský (VŠB TUO) Spojová implementace lineárních datových struktur 95 / 312

Obousměrný seznam dynamická implementace Položka seznamu pole struct ListItem int Value; int Prev; int Next; }; Položka seznamu dynamicky struct ListItem int Value; ListItem* Prev; ListItem* Next; }; Jiří Dvorský (VŠB TUO) Spojová implementace lineárních datových struktur 96 / 312

Obousměrný seznam dynamická implementace Vlastní seznam pole struct ListInArray ListItem Data[ListSize]; int Head; int Free; int Current; }; Vlastní seznam dynamicky struct ListInArray ListItem* Head; ListItem* Current; }; Změna proti poli není pole Data, není potřeba ukazatel Free. Jiří Dvorský (VŠB TUO) Spojová implementace lineárních datových struktur 97 / 312

Obousměrný seznam alokace položek seznamu alokace pomocí operátoru new např. ListItem* p = new ListItem; dealokace pomocí operátoru delete např. delete p; přístup ke členům struktury ListItem statický přístup: ListItem item; item.value = 15; přístup přes pointery: ListItem* p = new ListItem; *p.value = 128; dereferenci a operátor "."lze nahradit zkratkou p Value = 128; Jiří Dvorský (VŠB TUO) Spojová implementace lineárních datových struktur 98 / 312

Obousměrný seznam dynamická implementace Odlišnosti od implementace v poli nutno provést dealokaci paměti!!!!!! standardní ukazatel NULL. Jiří Dvorský (VŠB TUO) Spojová implementace lineárních datových struktur 99 / 312

Obousměrný seznam zarážky (sentinels) Seznam bez zarážek Seznam se zarážkami Jiří Dvorský (VŠB TUO) Spojová implementace lineárních datových struktur 100 / 312

Obousměrný seznam zarážky (sentinels) zarážky slouží ke zjednodušení kódu, vlastní implementace NULL lze ignorovat hraniční případy: Bez zarážek if (p Prev!= NULL) p Prev Next = p Next; } Zarážky p Prev Next = p Next; p Next Prev = p Prev; else L.Head = p Next; } if (p Next!= NULL) p Next Prev = p Prev; } Jiří Dvorský (VŠB TUO) Spojová implementace lineárních datových struktur 101 / 312

Kontrolní otázky 1. Máme danou strukturu a čtyři proměnné: struct MyStruct int Id; double Value; }; MyStruct a, b; MyStruct *p, *q; Co se stane pokud provedu a = b;? A co pokud provedu p = q;? 2. Jak alokuji dynamicky strukturu z předchozí otázky? Pomocí jakého operátoru? 3. Jak uvolním z paměti dynamicky alokovanou strukturu, kterou jsem vytvořil v předchozí otázce? Jiří Dvorský (VŠB TUO) Spojová implementace lineárních datových struktur 102 / 312

Kontrolní otázky (pokrač.) 4. Mám deklarovanou proměnnou MyStruct a;. Jak se dostanu k položce Value v proměnné a? 5. Mám deklarovanou proměnnou MyStruct *p;. Jak se dostanu k položce Value v proměnné p pomocí jediného operátoru (bez dereference)? 6. Mám deklarovanou proměnnou MyStruct *p;. Jak se dostanu k položce Value v proměnné p pomocí operátoru dereference? 7. Mám následující kód: double *p = new double; delete p; *p = 15; Co tento kód způsobí? 8. Mám následující kód: Jiří Dvorský (VŠB TUO) Spojová implementace lineárních datových struktur 103 / 312

Kontrolní otázky (pokrač.) double *p = new double; p = NULL; Co tento kód způsobí? K čemu v paměti dojde? 9. Mám následující kód: double *p = new double; p = NULL; *p = 15; Co tento kód způsobí? K čemu v paměti dojde? 10. Mám seznam implementovaný pomocí pole. Musím tento seznam (především to pole) explicitně uvolňovat z paměti pomocí operátoru delete? 11. Mám seznam implementovaný pomocí dynamicky alokovaných struktur. Musím tento seznam explicitně uvolňovat z paměti pomocí operátoru delete? Jiří Dvorský (VŠB TUO) Spojová implementace lineárních datových struktur 104 / 312

Kontrolní otázky (pokrač.) 12. Co je to zarážka (angl. sentinel)? Co nahrazuje? 13. K čemu slouží zarážka? 14. Jak se změní algoritmus vkládání prvku na začátek obousměrného seznamu, pokud využijeme zarážku? 15. Jak se změní algoritmus smazání prvku z obousměrného seznamu, pokud využijeme zarážku? 16. Kdy je vhodné využít zarážku? Zaměřte se na spotřebovanou paměť a počet prvků v uvažovaném seznamu. 17. Kdy je vhodné použít seznam implementovaný v poli a kdy pomocí dynamických struktur? Zaměřte se na rychlost operací vložení (s tím spojené alokování položky), operací mazání (s tím spojené dealokovaní položky). Dále se zaměřte na možnou změnu kapacity seznamu. 18. Jestliže budu k seznamu přistupovat pouze pomocí funkcí Insert, Delete nebo Search a změním implementaci seznamu. Musím měnit i okolní kód, kde se seznam využívá? Jiří Dvorský (VŠB TUO) Spojová implementace lineárních datových struktur 105 / 312

Kontrolní otázky (pokrač.) 19. Pokud implementuji frontu pomocí dynamických struktur, potřebuji kruhový buffer a podobné triky s polem? 20. Zkuste navrhnout efektivní algoritmus pro třídění seznamu. Uvědomte si, že k položkám seznamu můžeme přistupovat pouze sekvenčně, jako například k datům v souboru. Jaký Vám známý algoritmus pro třídění lze na tento problém aplikovat? 21. Zkuste navrhnout rekurzívní algoritmus pro vyhledání prvku v obousměrném seznamu. 22. Jak spočítáte počet položek v seznamu? Má na tento algoritmus vliv zda je seznam obousměrný nebo jednosměrný? 23. Jak byste v obousměrném seznamu implementovali mazání k-té položky. 24. Popište algoritmus mazání položky z obousměrného seznamu. Položka určená ke smazání se musí nejprve vyhledat podle dat uložených v položce. Jiří Dvorský (VŠB TUO) Spojová implementace lineárních datových struktur 106 / 312

Kontrolní otázky (pokrač.) 25. Popište algoritmus vkládání na začátek obousměrného seznamu. Jiří Dvorský (VŠB TUO) Spojová implementace lineárních datových struktur 107 / 312

Děkuji za pozornost Jiří Dvorský (VŠB TUO) Spojová implementace lineárních datových struktur 108 / 312