Celková osnova všech přednášek. Algoritmy II prezentace k přednáškám. Celková osnova všech přednášek (pokrač.)

Rozměr: px
Začít zobrazení ze stránky:

Download "Celková osnova všech přednášek. Algoritmy II prezentace k přednáškám. Celková osnova všech přednášek (pokrač.)"

Transkript

1 elková osnova všech přednášek lgoritmy prezentace k přednáškám doc. Mgr. iří vorský, Ph.. Katedra informatiky akulta elektrotechniky a informatiky VŠ TU Ostrava Prezentace ke dni 28. března 2018 iří vorský (VŠ TUO) lgoritmy 1 / Úvodní přednáška O předmětu lgoritmy Prezenční forma studia Výuka Úkoly a jejich hodnocení Kombinovaná forma studia Výuka Úkoly a jejich hodnocení Software pro výuku Studijní literatura 1. Lineární datové struktury atové struktury Zásobník ronta Seznam 2. ynamická alokace paměti Podobenství o žlutém lístečku a kastrolu s gulášem iří vorský (VŠ TUO) lgoritmy 2 / 458 elková osnova všech přednášek (pokrač.) Podobenství o kabátu v šatně na plese Pointery v Spojová implementace lineárních datových struktur Spojová implementace obousměrného seznamu Zdrojové kódy 4. rafy Sled, cesta, kružnice Stromy Kořenový strom Vybrané pojmy Seřazený strom 5. lgoritmy průchodů grafem Prohledávání grafu do šířky Prohledávání grafu do hloubky plikace Topologické třídění iří vorský (VŠ TUO) lgoritmy 3 / 458 elková osnova všech přednášek (pokrač.) ledání cesty v bludišti Počítačová grafika vyplňování oblasti 6. inární vyhledávací stromy inární stromy inární vyhledávací stromy 7. inární vyhledávací stromy 8. Vyvážené a vícecestné stromy -stromy 9. ašování 10. Vyhledávání v textu efinice základních pojmů Vyhledávání hrubou silou Morris-Prattův algoritmus Knuth-Morris-Prattův algoritmus iří vorský (VŠ TUO) lgoritmy 4 / 458

2 O předmětu lgoritmy Úvodní přednáška doc. Mgr. iří vorský, Ph.. Katedra informatiky akulta elektrotechniky a informatiky VŠ TU Ostrava Upozornění Všechny informace k předmětu naleznete na webu Tento web je průběžně aktualizován. Tato prezentace slouží jen pro účely úvodní přednášky a nebudu ji následně aktualizovat. iří vorský (VŠ TUO) Úvodní přednáška 5 / 458 iří vorský (VŠ TUO) Úvodní přednáška 6 / 458 O předmětu lgoritmy Prerekvizity Předmět je pokračováním předmětu lgoritmy. lavní náplní předmětu jsou datové struktury a související algoritmy. V předmětu budou využívány znalosti z předmětu Programování objektově orientované programování. Probírané algoritmy a datové struktury budou demonstrovány v jazyce ++. Nemalý důraz je kladen na praktickou implementaci probíraných algoritmů a datových struktur. Studenti jsou vedeni k analýze algoritmizovaných problémů a k syntéze řešení z menších celků. Prerekvizity jsou soubor nutných podmínek, které musí student splňovat, aby si mohl daný předmět zapsat. Poznámky: Předmět lgoritmy má jako prerekvizitu uveden v systému dison předmět lgoritmy, ale protože se jedná (L ) o povinný předmět, prerekvizity v tomto případě nehrají roli nelze studentovi znemožnit, aby si zapsal povinný předmět. inak řečeno, na lgoritmy nemá vliv jestli jste předmět lgoritmy v zimním semestru formálně ukončili s úspěchem nebo ne. Pro zvládnutí předmětu je nutné znát ++ v rozsahu předmětu lgoritmy a Programování. Znalost středoškolské matematiky. iří vorský (VŠ TUO) Úvodní přednáška 7 / 458 iří vorský (VŠ TUO) Úvodní přednáška 8 / 458

3 Rozsah předmětu, způsob zakončení arant předmětu Rozsah předmětu výuka probíhá v letním semestru prvního ročníku bakalářského studia, hodinová dotace: 2 hodiny přednášky a 2 hodiny cvičení týdně v prezenční formě, 6 tutoriálů v kombinované formě studia. předmět je ohodnocen 5 kredity. doc. Mgr. Kancelář: mail: Web: iří vorský, Ph jiri.dvorsky@vsb.cz K čemu je garant předmětu? Způsob zakončení arant předmětu zodpovídá za průběh výuky celého předmětu, průběh cvičení, plnění úkolů na cvičeních a za korektní hodnocení úkolů. Problémy spojené se cvičeními řešte primárně se svým cvičícím. Pokud se nepodaří dosáhnout řešení problému s cvičícím obracejte se na garanta předmětu. zakončení klasifikovaným zápočtem, klasifikovaný zápočet není zkouška, nejsou tři termíny jako u zkoušky, iří vorský (VŠ TUO) arant předmětu, přednášející, tutor komb. formy Úvodní přednáška 9 / 458 Konzultační hodiny iří vorský (VŠ TUO) Úvodní přednáška 10 / 458 Studenti se specifickými nároky Pokud na přednášce nebudete něčemu rozumět, potřebujete poradit nebo vyřešit nějaký problém s přednáškou, cvičeními, testy, Vaší absencí na výuce atd. je možné využít konzultační hodiny. V tento čas jsem připraven věnovat se Vám osobně. Termín konzultačních hodin je uveřejněn mým webových stránkách. Žádám Vás ale o dodržení několika pravidel: 1. Konzultaci je nutné si domluvit předem, nejlépe em. 2. Pokud potřebujete poradit s učivem, přineste si s sebou materiály, které jste si k tématu prostudovali, vypište si co je Vám jasné a kde jste se zasekli a potřebujete poradit. Rozhodně neplatí myšlenka: á k němu přijdu na konzultaci, on si o mě bude myslet, že jsem úplně blbej a u zápočtu mě vyhodí. entrum Slunečnice poskytování služeb a podpory zpřístupňující studium i pro studenty se specifickými nároky, lze získat, mimo jiné, zvýšenou časovou dotaci na úkoly. Výzva e vysoce žádoucí, aby studenti, kteří dostanou tuto zvýšenou časovou dotaci, neprodleně kontaktovali svého cvičícího a garanta předmětu, abychom předešli případným problémům! Přijdte se zeptat rovnou ke zdroji informací internetová fóra jsou zaplevelena různými polopravdami i naprostými nesmysly. iří vorský (VŠ TUO) Úvodní přednáška 11 / 458 iří vorský (VŠ TUO) Úvodní přednáška 12 / 458

4 lgoritmy výuka, úkoly a jejich hodnocení Specifika výuky, úkolů a jejich hodnocení pro různé formy studia prezenční a kombinované studium má specifickou formu výuky, obě formy studia mají specifické podmínky pro splnění předmětu, podle formy Vašeho studia se Vás týká pouze jedna ze dvou následujících částí prezentace. Prezenční forma studia iří vorský (VŠ TUO) Úvodní přednáška 13 / 458 iří vorský (VŠ TUO) Úvodní přednáška 14 / 458 Přednášky Stručná osnova přednášek Každé pondělí od 12:30 do 14:00, učebna N1. sou nepovinné, nicméně účast se doporučuje. Slouží především k výkladu učiva, k převedení ukázkových příkladů, jejich typických řešení atd. Na Vaše případné dotazy jsem schopen odpovídat v konzultačních hodinách. 0. Úvodní přednáška organizační záležitosti, souhrn nutných znalostí z předmětu lgoritmy 1. Lineární datové struktury abstraktní datové struktury, zásobník, fronta, seznam 2. ynamická alokace paměti pointery, operátory reference, dereference, alokování a dealokování paměti 3. Spojová implementace lineárních datových struktur využití OOP a dynamicky alokovaných struktur 4. rafy základní pojmy, graf jako datová struktura, možnosti implementace grafu 5. lgoritmy průchodů grafem průchod grafu do hloubky a do šířky, aplikace průchodu grafem 6. inární vyhledávací stromy základní pojmy, vyhledávání iří vorský (VŠ TUO) Úvodní přednáška 15 / 458 iří vorský (VŠ TUO) Úvodní přednáška 16 / 458

5 Stručná osnova přednášek (pokrač.) vičení 7. inární vyhledávací stromy vkládání, rušení vrcholů, průchody stromem 8. Vyvážené a vícecestné stromy VL-stromy, red-black stromy. -stromy 9. ašování hašovací tabulky, metody řešení kolizí 10. Vyhledávání v textu vyhledávání jednoho a více vzorků, elementární lexikální analýza textu 11. ednoduchý překladač překlad aritmetických a logických výrazů, postfixová notace a její interpretace pomocí zásobníku 12. Techniky řešení problémů rozděl a panuj, žravý algoritmus, dynamické programování Náplní cvičení je průběžné hodnocení aktivity studentů a implementace jednoho až dvou příkladů vztahujících se k probíranému učivu. Ve cvičeních, kde je naplánována obhajoba projektu průběžný test znalostí neprobíhá, ani neprobíhá implementace příkladů. elé cvičení je věnováno obhajobě projektů. Ve cvičeních je také možné konzultovat probírané učivo. Všechna pondělní cvičení se považují za příslušná k následujícímu týdnu. inak řečeno, studenti mající cvičení v pondělí odpovídají na otázky průběžného testu až následující týden. Rozdělení do cvičení, tak jak je uvedeno v informačním systému dison, je nutné respektovat. Není možné překračovat kapacitu cvičení. Veškeré přesuny je nutné mít zaznamenány v systému dison. iří vorský (VŠ TUO) Úvodní přednáška 17 / 458 iří vorský (VŠ TUO) Úvodní přednáška 18 / 458 vičení Úkoly Upozornění vičení nenahrazuje přednášku! Neočekávejte, že pokud nebudete chodit na přednášky, tak Vám cvičící na cvičeních bude dělat jakousi bleskovou náhradní přednášku, abyste se vůbec mohli pustit do příkladů, jejichž řešení se na cvičení předpokládá. ývá dobrým zvykem, že studenti se na cvičení aspoň minimálně připraví. Není nutné látku precizně ovládat, ale je nutné se orientovat v základních pojmech. inak cvičení nemají smysl. V průběhu semestru a ve zkouškovém období budete plnit tyto úkoly: 1. Průběžné hodnocení cvičení 2. Semestrální projekt 3. Závěrečná písemná práce iří vorský (VŠ TUO) Úvodní přednáška 19 / 458 iří vorský (VŠ TUO) Úvodní přednáška 20 / 458

6 Průběžné hodnocení cvičení Přednášky a odpovídající hodnocená cvičení Na deseti hodnocených cvičeních bude každý student cvičím hodnocen za následující aktivity: 1. průběžný test znalostí (znám též jako pešek ), 2. aktivita při plnění úkolů na cvičení a 3. splnění domácích úkolů zadaných cvičícím. Za každé hodnocené cvičení lze získat 0 až 2 body. ednou získané bodové hodnocení není možné měnit - pokud například student získá z některého cvičení nulu, je výsledek definitivní. Studenti, kteří se ze cvičení omluví se dohodnou se cvičícím na přiměřeném splnění hodnocených aktivit. V tomto případě lze hodnotit průběžný test znalostí, případně splnění domácích úloh, aktivitu na cvičení už samozřejmě hodnotit nelze. Za neomluvené absence na cvičeních je 0 bodů. Týden Pondělí Sada otázek Ve cvičení se zkouší Projekty z přednášky sada otázek února února února března března 4 4 Zadání projektů března března dubna Velikonoce Zadání projektů 2 Obhajoba projektů dubna dubna dubna 9 Zadání projektů 3 Obhajoba projektů dubna května května Závěrečná písemka Obhajoba projektů 3 iří vorský (VŠ TUO) Úvodní přednáška 21 / 458 iří vorský (VŠ TUO) Úvodní přednáška 22 / 458 Semestrální projekt V průběhu semestru každý student vypracuje semestrální projekt. Zadání témat, vypracování a obhajoby proběhnou ve třech dávkách. Každé dávky se zúčastní třetina studentů. Na webu předmětu bude zveřejněno rozdělení studentů do dávek a odpovídající zadání. Tři cvičení během semestru budou věnována obhajobám projektů. Na každém z těchto tří cvičení vystoupí určená třetina studentů se svým projektem a seznámí cvičícího a své spolužáky s řešením zadaného projektu. Odevzdání projektu proběhne prostým přinesením projektu na cvičení, není nutné projekt zasílat dopředu. Pokud vznikne pochybnost o autorství projektu, obhajoba bude hodnocena 0 body. Oprava bude realizována formou realtime testu ve zkouškovém období. iří vorský (VŠ TUO) Úvodní přednáška 23 / 458 Závěrečná písemná práce Závěrečná písemná práce se bude psát ve zkouškovém období. ude zaměřena především na teoretické znalosti, a částečně také na schopnost vysvětlit ukázku kódu v ++ a naopak napsat jednoduchou ukázku kódu v ++ podle slovního či matematického zadání. U závěrečné písemné práce si termín volíte sami tím, že se na něj přihlásíte v disonu. Takto zvolený termín je pro Vás závazný v okamžiku, kdy je systémem ukončeno přihlašování. V opačném případě je termín hodnocen automaticky 0 body. Opravný termín vám už nebude poskytnut. Opravný termín na závěrečnou písemnou práci je poskytován jen těm studentům, kteří u svého prvního pokusu získali aspoň 10 bodů. Počet bodů na prvním termínu Opravný termín 0 až 9 N 10 až 20 NO více než 21 není nutný, úspěch iří vorský (VŠ TUO) Úvodní přednáška 24 / 458

7 Závěrečná písemná práce (pokrač.) odnocení úkolů Obdobná povinnost omluvit se platí i pro opravný termín. U všech úkolů jste povinni se, na požádání učitele, prokázat svou studentskou kartou nebo jiným oficiálním dokladem totožnosti. Předmět je ukončen klasifikovaným zápočtem. Nevztahuje se tudíž na něj požadavek dvou opravných pokusů, jak to vyžaduje studijní řád u zkoušky. Proč nepovolovat opravný termín Pokud někteří studenti nepovažují za nutné se na písemnou práci aspoň trochu připravit, já zase nepovažuji za nutné s těmito studenty ztrácet čas opravováním jejich písemek, či spíše výtvorů! Pro úspěšné absolvování předmětu je nutné splnit všechny výše uvedené úkoly, a zároveň u všech úkolů aspoň minimální počet bodů. Minimální body Maximální body Průběžný test znalostí Obhajoba projektu Písemná práce elkem iří vorský (VŠ TUO) Úvodní přednáška 25 / 458 iří vorský (VŠ TUO) Úvodní přednáška 26 / 458 Konec části pro prezenční formu studia Kombinovaná forma studia iří vorský (VŠ TUO) Úvodní přednáška 27 / 458 iří vorský (VŠ TUO) Úvodní přednáška 28 / 458

8 Tutoriály Tutoriály (pokrač.) 1. tutoriál 16. února 2018 Na tomto úvodním soustředění Vám budou sděleny informace o organizaci studia předmětu a informace o náplni předmětu. Souhrn nutných znalostí z předmětu lgoritmy. 2. tutoriál 2. března 2018 K tomuto datu se předpokládá zvládnutí následujících témat: bstraktní datové struktury. Zásobník, fronta, seznam. bstraktní datové struktury s využitím OOP. 3. tutoriál 16. března 2018 K tomuto datu se předpokládá zvládnutí následujících témat: rafy. raf jako datová struktura. Možnosti implementace grafu. Průchod grafu do hloubky a do šířky. plikace průchodu grafem. 4. tutoriál 6. dubna 2018 povinný tutoriál K tomuto datu se předpokládá zvládnutí následujících témat: inární stromy, vkládání, rušení vrcholů, průchody stromem. inární stromy, definice, vyhledávání. inární stromy, vkládání, rušení vrcholů, průchody stromem. Na tomto tutoriálu proběhne první test. iří vorský (VŠ TUO) Úvodní přednáška 29 / 458 iří vorský (VŠ TUO) Úvodní přednáška 30 / 458 Tutoriály (pokrač.) Tutoriály (pokrač.) 5. tutoriál 21. dubna 2018 povinný tutoriál Tento tutoriál je rozdělen do několika skupin, tutoriál proběhne na počítačové učebně, celou náplň tutoriálu bude tvořit druhý test. 6. tutoriál 4. května 2018 Není 7. tutoriál 18. května 2018 povinný tutoriál K tomuto datu se předpokládá zvládnutí následujících témat: Vyvážené binární stromy. -stromy. ašování. Konzultace k projektu. iří vorský (VŠ TUO) Úvodní přednáška 31 / 458 iří vorský (VŠ TUO) Úvodní přednáška 32 / 458

9 Úkoly a jejich hodnocení Úkoly a jejich hodnocení (pokrač.) První test První test se bude psát na tutoriálu 6. dubna ude to krátký písemný test na cca 10 až 15 minut maximálně. ruhý test ruhý test se bude psát na tutoriálu 21. dubna Opravný termín bude ve zkouškovém období. Na začátku vymezené doby dostanete zadání, které ve zbývajícím čase naprogramujete, odladíte a předvedete. Projekt Koncem března budou na webu tutora zveřejněna zadání projektů a jejich rozdělení mezi studenty. eadline pro odevzdání projektu je 20. května :59. Podrobné pokyny k odevzdání budou zveřejněny se zadáním. Ve zkouškovém období proběhne obhajoba. Termíny budou vypsány v systému dison. K obhajobě projektu není opravný termín. Zásadním kritériem pro úspěšnou obhajobu je funkční program. iří vorský (VŠ TUO) Úvodní přednáška 33 / 458 iří vorský (VŠ TUO) Úvodní přednáška 34 / 458 odnocení úkolů Obecné poznámky k úkolům nutno splnit všechny výše uvedené úkoly, a zároveň u všech úkolů aspoň minimální počet bodů, bodové hodnocení konkrétní úlohy pro konkrétního studenta je uloženo v systému dison. Minimální počet bodů Maximální počet bodů První test ruhý test Projekt elkem Na všechny oba testy a obhajobu projektu budou v disonu vypsány řádné termíny, kde se budete hlásit. bsolvování prvního a druhého testu v řádném termín tj. na příslušném tutoriálu je povinné. Pokud se řádného termínu testu nezúčastníte, bez ohledu na to zda jste byli přihlášeni nebo ne, je vaší povinností se garantovi předmětu předem omluvit. Termín předem znamená nejpozději do začátku termínu, na kterém máte daný test psát. Postačující je omluva em na adresu garanta předmětu. Pokud se neomluvíte, daný úkol bude považován za nesplněný (0 bodů) a opravný termín vám nebude umožněn. ůsledkem je pak neúspěšné ukončení celého předmětu. Pokud se řádného termínu zúčastníte a neuspějete s řešením zadaného úkolu, máte nárok na opravný termín. iří vorský (VŠ TUO) Úvodní přednáška 35 / 458 iří vorský (VŠ TUO) Úvodní přednáška 36 / 458

10 Obecné poznámky k úkolům (pokrač.) Obdobná povinnost omluvit se platí i pro opravný termín. Opravné termíny budou vypsány ve zkouškovém období. K obhajobě projektu opravný termín není. U všech úkolů jste povinni se prokázat svou studentskou kartou nebo jiným oficiálním dokladem totožnosti (občanský průkaz, řidičský průkaz, cestovní pas). ez prokázání totožnosti Vám nebude výsledek započítán. ále připomínám, že každý prohřešek vůči studijnímu řádu u testů a písemné práce bude nekompromisně postihován. de především o opisování, plagiátorství, a záměnu studentů (pošlete na test někoho jiného místo sebe). Konec části pro kombinovanou formu studia iří vorský (VŠ TUO) Úvodní přednáška 37 / 458 iří vorský (VŠ TUO) Úvodní přednáška 38 / 458 Software pro výuku Vývojová prostředí pro ++ Primární software: Vývojové prostředí pro ++ okumentace k ++ oplňkový software: okumentační systém oxygen, Typografický systém L TX, Microsoft Visual Studio 2015 (VS2015): pro výukové účely zcela legálně a zadarmo, image instalačních disků lze stáhnout z Microsoft reamspark for cademic nstitutions, elms.cs.vsb.cz instalace včetně dokumentace Microsoft eveloper Network, msdn.microsoft.com, alternativou je tzv. ommunity dition, ke stažení přímo od Microsoftu. iří vorský (VŠ TUO) Úvodní přednáška 39 / 458 iří vorský (VŠ TUO) Úvodní přednáška 40 / 458

11 Studijní literatura Učební materiály lze rozdělit do dvou skupin: literatura o programovacím jazyku ++, literatura o algoritmech a datových strukturách. Níže uvedenou literaturu využijete v předmětech: lgoritmy a lgoritmy, Programování a Programování. iří vorský (VŠ TUO) Úvodní přednáška 41 / 458 Základní literatura o ++ O jazyce ++, který je naším hlavním tématem, existuje v dnešní době řada česky psaných knih. Následující knihy můžete využít pro své studium: 1. Liberty., ones. L.: Naučte se ++ za 21 dní, 2. aktualizované vydání, omputerpress, 2007, SN Zdařilá učebnice jazyka ++. Kniha je sice poněkud tlustá, nicméně je rozdělena do 21 lekcí rozumného rozsahu. Pokrývá veškerou látku, kterou bychom měli za oba semestry probrat. 2. ckel.: Myslíme v jazyku ++, rada Publishing, 2000, SN Kniha od klasika ve výuce jazyka ++. Opět pokrývá veškerou látku, kterou bychom měli za oba semestry probrat.. Kniha je dostupná v angličtině i online na serveru 3. Stroustrup,.: ++ Programovací jazyk. Česky: N-technická literatura, Praha Vynikající kniha přímo od autora jazyka ++. Kniha dosti rozsáhlá, ale na druhou stranu obsahující naprosto vše co lze o ++ napsat. iří vorský (VŠ TUO) Úvodní přednáška 42 / 458 oplňková literatura o ++ ále je možné čerpat zajímavé informace z následujících knih: 1. Virius M.: Pasti a propasti jazyka ++, 2. aktualizované a rozšířené vydání, omputerpress, 2005, SN V této knize naleznete podrobné vysvětlení, pro začátečníka mnohdy překvapivého chování překladače jazyka lexandrescu.: Moderní programování v ++ Šablony, generické komponenty a návrhové vzory, omputerpress 2004, SN Pro ty z Vás, kteří se hodlají dozvědět něco o trendech ve využití jazyka ++, nabízí tato kniha rozšiřující informace. Pozor, nejedná se přímo o učebnici jazyka Koenig., Moo..: Rozumíme ++, omputerpress, 2003, SN X. lternativní učebnice jazyka ++ s odlišnou metodou výkladu než předchozí doporučené. Výuka je vedena přes využití knihoven jazyka ++, okamžitý nástup objektového programování atd. iří vorský (VŠ TUO) Úvodní přednáška 43 / 458 Ostatní literatura o Šaloun, P.: Programovací jazyk ++ pro zelenáče, Neocortex Praha, 2005, SN Richta, K., Šaloun, P.: Programovací jazyk, skriptum ČVUT, Praha Šaloun, P.: Programovací jazyk. Skriptum VŠ-TU Ostrava Kernighan,., Ritchie,.: Programovací jazyk, lfa ratislava, erout, P., Rudolf, V., Šmrha, P.: programátora v jazyce, nakladatelství KOPP, České udějovice, Vondrák,., Šaloun, P.: Objektově orientované programování, skriptum VŠ Ostrava, orstmann,. S.: Vyšší škola objektového návrhu v ++. Science, Veletiny Večerka,.: azyk ++: popis jazyka s příklady, skriptum UP Olomouc, Olomouc 1996, SN iří vorský (VŠ TUO) Úvodní přednáška 44 / 458

12 Základní literatura o algoritmech oplňková literatura o algoritmech 1. Skripta lgoritmy 2. Wirth, N.: lgoritmy a štruktúry údajov, lfa, ratislava, Sedgewick R.: lgoritmy v, části 1-4, SoftPress, Praha, xistuje i v anglické verzi, náročná, ale vynikající kniha. 4. Wróblewski P.: lgoritmy. atové struktury a programovací techniky, omputer Press, Praha 2003, druhé vydání Topfer, P.: lgoritmy a programovací techniky, Prometheus, Praha Virius, M.: Základy algoritmizace, ČVUT Praha, 1997, skripta. 3. onzík,. a kolektiv: Programovací techniky, VUT rno, 1987, skripta. 4. arel,.: lgorithmics, The Spirits of omputing, ddison-wesley Publishing ompany, ormen, Leiserson, Rievest: ntroduction to lgorithms, MT Press, Sedgewick, R.: lgorithms in ++, ddison-wesley Publishing ompany, Wood,.: ata Structures, lgorithms and Performance, ddison-wesley Publishing ompany, iří vorský (VŠ TUO) Úvodní přednáška 45 / 458 iří vorský (VŠ TUO) Úvodní přednáška 46 / 458 Ostatní učební materiály Prezentace z přednášek Prezentace z přednášek nejsou studijním materiálem. Slouží přednášejícímu jako osnova jeho výkladu a studentům jako přehled probrané látky. Pročtení těchto několika prezentací není možné považovat za dostatečnou přípravu k tomu slouží studijní literatura a hlavně vlastní, samostatné programování. ěkuji za pozornost alší materiály budou případně doplněny na webových stránkách předmětu. iří vorský (VŠ TUO) Úvodní přednáška 47 / 458 iří vorský (VŠ TUO) Úvodní přednáška 48 / 458

13 atové struktury Lineární datové struktury doc. Mgr. iří vorský, Ph.. Katedra informatiky akulta elektrotechniky a informatiky VŠ TU Ostrava určitý způsob ukládání a organizace dat v počítači, cílem je efektivní manipulace s daty, specializace na různé úlohy, obsaženy v takřka každém programu, efektivní datová struktura je základem pro efektivní algoritmy, implementace datové struktury vyžaduje implementaci příslušných operací, abstraktní datový typ matematická abstrakce datové struktury. iří vorský (VŠ TUO) Lineární datové struktury 49 / 458 iří vorský (VŠ TUO) Lineární datové struktury 50 / 458 atové struktury specializace atové struktury význam datové struktury jsou přizpůsobeny pro odlišné druhy aplikací -stromy základ implementace SQL databází hašovací tabulky ukládání informací o identifikátorech při kompilaci zdrojového kódu zásobník volání funkcí, interpretace aritmetických výrazů základní stavební kámen softwarových systémů obvykle je efektivní datová struktura klíčem k efektivnímu algoritmu! klíčový faktor v softwarovém inženýrství iří vorský (VŠ TUO) Lineární datové struktury 51 / 458 iří vorský (VŠ TUO) Lineární datové struktury 52 / 458

14 atové struktury vs. bstraktní datové typy Zásobník (Stack) implementace datové struktury vede k implementaci operací, které vytváří a manipulují s instancemi dané struktury, efektivitu datové struktury nelze oddělit od efektivity implementovaných operací jak tedy datovou strukturu implementovat? co je rozhodující? jaké jsou limity možností? abstraktní datový typ (T) teoretická definice, plus popis operací datová struktura je konkrétní implementací T například T zásobník (stack) lze implementovat mnoha způsoby harakteristika princip last-in, first-out, LO prvek, který byl vložen poslední, je jako první ze zásobníku vyzvednut tributy prvky vkládáme na tzv. vrchol zásobníku (stack pointer). Ukazatel zásobníku není nutně ukazatel ve smyslu práce s dynamicky alokovanou pamětí, haldou. prvně vložený prvek se nazývá dno zásobníku (stack bottom) iří vorský (VŠ TUO) Lineární datové struktury 53 / 458 iří vorský (VŠ TUO) Lineární datové struktury 54 / přednáška Zásobník, pokračování Zásobník operace Základní pojmy Řídící struktury atové typy Lineární datové struktury Zásobník, pokračování Operace Push vložení prvku na vrchol zásobníku Pop vyjmutí prvku z vrcholu zásobníku smpty test prázdnosti zásobníku Top vrátí prvek z vrcholu zásobníku bez jeho vyjmutí Operace mají konstantní časovou složitost. Push(15) Push(17) Pop() a) Push(15); Push(6); Push(3) Push(2); Push(9); b) Push(17); Push(2) Push(3); c) Pop(); Push(9) hybové stavy Pokud provedeme operaci Pop na prázdném zásobníku nastává tzv. podtečení (stack underflow). Pokud není možné přidat další prvek, nastává tzv. přetečení (stack overflow). Úvod do programování c2005 Michal Krátký, iří vorský 30/34 iří vorský (VŠ TUO) Lineární datové struktury 55 / 458 iří vorský (VŠ TUO) Lineární datové struktury 56 / 458

15 Zásobník, pokračování Zásobník, příklad Využití zásobníku volání funkcí (metod) vyhodnocování aritmetických výrazů odstranění rekurze zásobníkově orientované jazyky, například PostScript, P testování parity závorek, TML/XML značek Testování parity závorek testovat správnost uzávorkování různé typy závorek levé závorky vkládáme do zásobníku při nalezení pravé otestujeme, zda máme v zásobníku odpovídající závorku musíme končit s prázdným zásobníkem, jinak chyba iří vorský (VŠ TUO) Lineární datové struktury 57 / 458 iří vorský (VŠ TUO) Lineární datové struktury 58 / 458 Zásobník ronta (Queue) mplementační problémy ak mít v kódu (jedné funkci) více zásobníků? ak zabránit, aby mohl kdokoliv v zásobníku něco měnit? Ochrana vnitřních dat. Lze implementovat zásobník, který by se dynamicky zvětšoval? Nešlo by vyrobit zásobník jako součástku? Třeba udělat z něj datový typ s definovanými operacemi? Potřebuji mít v programu zásobník čísel a znaků. To ho musím naimplementovat dvakrát? Nešlo by mít zásobník jako šablonu? harakteristika princip first-in, first-out, O prvek, který byl vložen první, je také jako první z fronty vyzvednut tributy první prvek se nazývá hlava fronty (head), poslední prvek se nazývá ocas fronty (tail). iří vorský (VŠ TUO) Lineární datové struktury 59 / 458 iří vorský (VŠ TUO) Lineární datové struktury 60 / 458

16 ronta, pokračování ronta, pokračování Operace Put vložení prvku za ocas fronty, tato operace se někdy nazývá také nqueue, et vyjmutí prvku z hlavy fronty, tato operace se někdy nazývá také equeue, smpty test prázdnosti fronty. Operace mají konstantní časovou složitost. hybové stavy Pokud provedeme operaci et na prázdné frontě nastává tzv. podtečení (queue underflow). Pokud není možné přidat další prvek, nastává tzv. přetečení (queue overflow). Využití fronty tisková fronta u sdílené tiskárny, plánovač v operačním systému (více běžících procesů na jednoprocesorovém počítači procesy se musí střídat), obsluha uživatelů na serverech obecně iří vorský (VŠ TUO) Lineární datové struktury 61 / 458 iří vorský (VŠ TUO) Lineární datové struktury 62 / 458 ronta, příklad ronta implementace Plánovač operačního systému cyklická obsluha (round robin) Tato část OS přiděluje jednotlivým procesům sdílený procesor: vybere z fronty čekajících procesů první proces, obnoví registry procesoru, spustí obnovený proces, po uplynutí vymezeného časového kvanta, zahájí odebírání procesoru, uloží obsah registrů zařadí tento proces na konec fronty, vybere z fronty čekajících procesů první proces... Způsoby implementace pomocí dynamické alokace paměti, pomocí pole hlava fronty na prvním prvku v poli, jednoduché přidávání prostě na konec, odebírání z fronty posunovat všechny prvky dopředu?! řešení kruhový buffer (circular buffer)! iří vorský (VŠ TUO) Lineární datové struktury 63 / 458 iří vorský (VŠ TUO) Lineární datové struktury 64 / 458

17 ronta, implementace kruhovým bufferem ronta, implementace kruhovým bufferem harakteristika jeden index ukazuje na hlavu fronty, jeden index ukazuje na ocas fronty, při vložení a vyjmutí prvku se indexy posunují o jedničku dál, při překročení počtu prvků v bufferu se indexy vrací na první pozici tj. 0 modulární aritmetika Problém - jak se pozná plná a prázdná fronta? Ocas ukazuje vždy na první volnou pozici ve frontě. edna pozice je udržována volná tj. v poli o N prvcích lze implementovat frontu velikosti N 1. iří vorský (VŠ TUO) Lineární datové struktury 65 / 458 iří vorský (VŠ TUO) Lineární datové struktury 66 / 458 Seznam (List) Seznam jednosměrný seznam harakteristika obecná lineární datová struktura, tributy operace nejsou striktně určeny, lze implementovat množinu, mnoho variant. první prvek seznamu se nazývá hlava seznamu (head), další prvky závisí na konkrétní implementaci. složen z položek, položky obsahují data a odkaz na další položku, každá položka ví pouze o svém následovníku, k položkám lze přistupovat sekvenčně, přímý přístup k položkám jako v poli je problém, nutno projít cyklem, pohyb seznamem dozadu je také problém, jak poznáme konec seznamu speciální odkaz nikam, většinou pojmenován nil, NULL, Nothing. iří vorský (VŠ TUO) Lineární datové struktury 67 / 458 iří vorský (VŠ TUO) Lineární datové struktury 68 / 458

18 Seznam, varianty Seznam pokračování jednosměrný seznam nejjednodušší varianta obousměrný seznam položka obsahuje odkaz na předchůdce i následníka, kruhový seznam začátek a konec seznamu splývají, Využití seznamu obecná datová struktura, dynamicky se měnící kolekce prvků, čili kdekoliv, například velice primitivní databáze. iří vorský (VŠ TUO) Lineární datové struktury 69 / 458 iří vorský (VŠ TUO) Lineární datové struktury 70 / 458 Obousměrný seznam implementace Obousměrný seznam alokace paměti Způsoby implementace pomocí dynamické alokace paměti, pomocí pole otázka jak alokovat nové prvky? Položka seznamu 1 struct Listtem 2 { 3 int Value; 4 int Prev; 5 int Next; 6 }; Vlastní seznam 1 struct Listnrray 2 { 3 Listtem ata[listsize]; 4 int ead; 5 int ree; 6 int urrent; 7 }; arbagge ollector () mechanismus pro sběr nepoužívané paměti, volného místa, na první volnou pozici ukazuje index ree, v nepoužívaných položkách seznamu je využita složka Next, která odkazuje na další volný prvek, při alokaci položky si vezmeme první volnou pozici a ree posuneme přes Next na další volnou pozici, při dealokaci vložíme uvolňovanou pozici k ree, se tedy chová jako zásobník volného místa. iří vorský (VŠ TUO) Lineární datové struktury 71 / 458 iří vorský (VŠ TUO) Lineární datové struktury 72 / 458

19 Obousměrný seznam průchod seznamem Kontrolní otázky terátor obecný mechanismus pro průchod datovou strukturou, matematicky řečeno pro všechny prvky datové struktury proveď, funkce void Reset nastaví iterátor na první prvek, funkce bool MoveNext posune iterátor na další prvek. Vrací true, při úspěšném posunu, jinak vrací false, funkce T urrent vrací data z aktuálního prvku. 1. Vysvětlete co znamená, že zásobník představuje paměť typu LO. 2. o je to vrchol zásobníku? o je to dno zásobníku? 3. aká je teoreticky kapacita zásobníku? 4. o je to přetečení zásobníku? o je to podtečení zásobníku? 5. ak se typicky nazývá operace vložení prvku do zásobníku? Popište tuto operaci. 6. ak se typicky nazývá operace vyjmutí prvku ze zásobníku? Popište tuto operaci. 7. Závisí složitost operací na počtu prvků v zásobníku? no či ne? 8. Uveďte příklady použití zásobníku. 9. o zásobníku vložím prvky v pořadí,,,. Potom je budu ze zásobníku vyjímat. akou dostanu posloupnost? 10. Vysvětlete co znamená, že fronta představuje paměť typu O. iří vorský (VŠ TUO) Lineární datové struktury 73 / 458 iří vorský (VŠ TUO) Lineární datové struktury 74 / 458 Kontrolní otázky (pokrač.) 11. o je to hlava fronty? o je to ocas fronty? 12. Závisí složitost operací na počtu prvků ve frontě? no či ne? 13. o je to přetečení fronty? o je to podtečení fronty? 14. o fronty vložím prvky v pořadí,,,. Potom je budu z fronty vyjímat. akou dostanu posloupnost? 15. ak se typicky nazývá operace vložení prvku do fronty? Popište tuto operaci. 16. ak se typicky nazývá operace vyjmutí prvku ze fronty? Popište tuto operaci. 17. Uveďte příklady použití fronty. 18. Popište hlavní problémy při implementaci fronty v poli. ak je lze řešit pomocí kruhové reprezentace fronty? 19. aký je rozdíl mezi frontou, zásobníkem a seznamem? Zaměřte se na operace vkládání a vyjímání prvků z těchto struktur. Kontrolní otázky (pokrač.) 20. o je to hlava seznamu, ocas seznamu? 21. Rozdíl mezi jednosměrným, obousměrným a kruhovým seznamem. 22. Popište algoritmus vyhledávání daného prvku v seznamu? 23. Lze využít algoritmus půlení intervalu pro vyhledávání v seznamu? aký je tu hlavní problém? 24. o je to garbage collector? 25. o je to iterátor? iří vorský (VŠ TUO) Lineární datové struktury 75 / 458 iří vorský (VŠ TUO) Lineární datové struktury 76 / 458

20 ynamická alokace paměti ěkuji za pozornost doc. Mgr. iří vorský, Ph.. Katedra informatiky akulta elektrotechniky a informatiky VŠ TU Ostrava iří vorský (VŠ TUO) Lineární datové struktury 77 / 458 iří vorský (VŠ TUO) ynamická alokace paměti 78 / 458 Podobenství o žlutém lístečku a kastrolu s gulášem Podobenství o žlutém lístečku a kastrolu s gulášem Pravidla hry: žlutý nalepovací lísteček lísteček je volný nebo je na něm napsáno, kde je guláš nebo že guláš není psací stůl lísteček je nalepen na vašem psacím stole kastrolek s gulášem v lednici obsahuje lahodný pokrm, který lze konzumovat lednice na základě lístečku vydá guláš, bez lístečku není guláš, lednici nelze prohledávat ra samotná maminka uvaří guláš, uschová jej do lednice a synáčkovi napíše na lísteček, kde se guláš ukrývá. o můžeme říci o žlutém lístečku: žlutý lísteček určitě není guláš samotný žlutý lísteček udává nepřímo polohu guláše žlutý lísteček existuje sám o sobě, zabírá jakési malé množství paměti žlutý lísteček není v lednici, je jinde obsah žlutého lístečku prázdný, uláš je v lednici nebo uláš není! obsah žlutého lístečku si můžu opsat na jiný dva lístečky odkazují na totožný guláš na jiný oranžový lísteček si můžu napsat kde leží žlutý lísteček na zelený lísteček si můžu napsat, kde leží oranžový lísteček iří vorský (VŠ TUO) ynamická alokace paměti 79 / 458 iří vorský (VŠ TUO) ynamická alokace paměti 80 / 458

21 Podobenství o žlutém lístečku a kastrolu s gulášem Podobenství o žlutém lístečku a kastrolu s gulášem Lednice a kastrol s gulášem: na základě žlutého lístečku lednice vydá guláš, s gulášem lze manipulovat, například přiostřit; co se stane když si guláš vyzvednu se zeleným lístečkem? vydaný guláš můžu sníst; co když přijdu se zeleným lístečkem co když žlutý lísteček zahodím? guláš zůstane v lednici navěky na nový lísteček si můžu napsat že v lednici mám nový kastrol, na základě žlutého lístečku si vyzvednu kastrol s gulášem a naleji ho i do nového kastrolu a mám dva exempláře guláše (Tady dochází k porušení zákona zachování hmoty vytváříme guláš z ničeho) nformatický výklad podobenství: psací stůl paměťový prostor, datový segment, místo pro uložení proměnných vzniklých v době kompilace lednice paměťový prostor, halda, prostor pro dynamickou alokaci paměti kastrol s gulášem dynamicky alokovaná data žlutý lísteček ukazatel nebo-li pointer. Smyslem pointeru je nepřímá adresace. Pointer není objektem samotným (objekt ne nutně ve smyslu OOP), ale je informací, kde se objekt nalézá. iří vorský (VŠ TUO) ynamická alokace paměti 81 / 458 iří vorský (VŠ TUO) ynamická alokace paměti 82 / 458 Podobenství o žlutém lístečku a kastrolu s gulášem Podobenství o žlutém lístečku a kastrolu s gulášem Možné stavy žlutého lístečku: čistý lísteček neinicializovaný pointer, pointer se teď chová jako bežná proměnná uláš je v lednici platný odkaz na guláš, lze provést dereferenci uláš není! zvláštní, vyhrazená, hodnota. Pointer ukazuje nikam. Nelze zaměňovat s čistým lístečkem. Pointer nikam lze testovat ale nelze provést dereferenci. 1 atovytyp *ZlutyListecek; 2 int *p; 3 int *q = NULL; 4 int *r = nullptr; Uvaření nového guláše: uvaření guláše lze chápat jako dynamickou alokaci objektu v paměti alokaci provedeme operátorem new 1 struct Kastrol 2 { 3 // gulas 4 }; 5 Kastrol *ZlutyListecek = new Kastrol; iří vorský (VŠ TUO) ynamická alokace paměti 83 / 458 iří vorský (VŠ TUO) ynamická alokace paměti 84 / 458

22 Podobenství o žlutém lístečku a kastrolu s gulášem Podobenství o žlutém lístečku a kastrolu s gulášem Manipulace s gulášem: na základě žlutého lístečku lze získat z lednice kastrol s gulášem a s tímto gulášem manipulovat operace získání guláše se nazývá dereference, odpointrování 1 Kastrol K = *ZlutyListecek; 2 K += LzicePapriky; nebo přímo 1 *ZlutyListecek += LzicePapriky; ereference neinicializovaného pointeru nebo nullptr Neexistující objekty nelze dereferencovat! atální chyba. Likvidace guláše: likvidaci guláše (snězení, vylití) lze chápat jako delokaci objektu v paměti delokaci provedeme pomocí operátoru delete 1 delete ZlutyListecek; Memory leak Každý dynamicky alokovaný objekt musí být uvolněn z paměti! inak dojde k úniku paměti. Nepoužívané objekty za vás nikdo neuklízí. iří vorský (VŠ TUO) ynamická alokace paměti 85 / 458 iří vorský (VŠ TUO) ynamická alokace paměti 86 / 458 Podobenství o žlutém lístečku a kastrolu s gulášem Podobenství o žlutém lístečku a kastrolu s gulášem Operace s pointery: derefence na základě žlutého lístečku dostanu kastrol s gulášem, odpointrování reference získání umístění objektu, poloha guláše v lednici, výsledek lze zapsat na žlutý lísteček reference a dereference jsou inverzní operace 1 struct Kastrol 2 { 3 // nejaka data 4 }; 5 Kastrol inyotovyulas; 6 Kastrol *ZlutyListecek = &inyotovyulas; Operace s pointery: 1 Kastrol *ZlutyListecek; 2 Kastrol *ZelenyListecek; přiřazení pointerů ZelenyListecek = ZlutyListecek, ve výsledku oba lístečky ukazují na tentýž kastrol, nebo na nic, nebo mají shodnou neinicializovanou hodnotu přiřazení objektů na které pointery ukazují *ZelenyListecek = *ZlutyListecek, ve výsledku se obsah guláše přelil do dašího kastrolu iří vorský (VŠ TUO) ynamická alokace paměti 87 / 458 iří vorský (VŠ TUO) ynamická alokace paměti 88 / 458

23 o pointer není Pointer není adresa v paměti. no pointer musí nutně skončit jako nějaká binární hodnota, kterou lze interpretovat jako číslo. Nelze si ale představovat, že na daném bajtu v paměti bychom nějakým přístojem našli binární ekvivalent odkazovaných dat. NULL není nula ani jiné přirozené číslo. Možná konverze na int je vražedným dědictvím NS. uj! Nebrat! azyk ++ nově (od verze ++ 11) obsahuje nullptr. iří vorský (VŠ TUO) ynamická alokace paměti 89 / 458 Podobenství o kabátu v šatně na plese Situace: Vesnický hasičský, sokolský či jiný ples. Šatna, kde odevzdáváte kabáty je vybavena pojízdnými věšáky. Odevzdáte kabát a dostanete papírový lísteček s číslem napříkad 118. Po plese si na základě lístečku vyzvednete kabát. estliže se na jeden věšák vejde 20 kabátů a začaly se věšáky plnit zleva, tak by šlo usuzovat, že váš kabát 118 je na šestém věšáku osmnáctý v pořadí. Vzhledem k tomu, že si šatnářky mohou věšáky přerovnávat, tak se nedá říci, kde se věšák v vašim kabátem v šatně nachází. le víme, že na základě lístečku kabát dostanu. Zbytek je záležitost šatnářky. Šatna plní roli paměti, šatnářka je memory manager, heap manager. Přesuny věšáků stránkování paměti, virtuální paměť atd. iří vorský (VŠ TUO) ynamická alokace paměti 90 / 458 Konstantní pointery ynamická alokace pole v ++ o lze označit za konstantní: polohu a obsah. elkem mohou nastat 4 možnosti: int* p; vše proměnné const int* p; konstantní obsah int* const p; konstantní poloha const int* const p; konstantní obsah i poloha. dentifikátor pole je pointer na první prvek tohoto pole. ednorozměrné pole 1 int * = new int[5]; 2 delete []; vourozměrné pole 1 double **M = new double*[r]; 2 for (int i = 0; i < R; i++) 3 M[i] = new double[]; 4 5 for (int i = 0; i < R; i++) 6 delete[]m[i]; 7 delete []M; iří vorský (VŠ TUO) ynamická alokace paměti 91 / 458 iří vorský (VŠ TUO) ynamická alokace paměti 92 / 458

24 ynamická alokace dvourozměrného pole v ++ ynamická alokace dvourozměrného pole v ++ (pokrač.) M M M[0] M[1] M[2] M[3] M[4] iří vorský (VŠ TUO) ynamická alokace paměti 93 / 458 iří vorský (VŠ TUO) ynamická alokace paměti 94 / 458 ynamická alokace dvourozměrného pole v ++ (pokrač.) ynamická alokace dvourozměrného pole v ++ (pokrač.) M M M[0] M[0][0] M[0][1] M[0][2] M[0] M[0][0] M[0][1] M[0][2] M[1] M[1] M[1][0] M[1][1] M[1][2] M[2] M[2] M[3] M[3] M[4] M[4] iří vorský (VŠ TUO) ynamická alokace paměti 95 / 458 iří vorský (VŠ TUO) ynamická alokace paměti 96 / 458

25 ynamická alokace dvourozměrného pole v ++ (pokrač.) ynamická alokace dvourozměrného pole v ++ (pokrač.) M M M[0] M[0][0] M[0][1] M[0][2] M[0] M[0][0] M[0][1] M[0][2] M[1] M[1][0] M[1][1] M[1][2] M[1] M[1][0] M[1][1] M[1][2] M[2] M[2][0] M[2][1] M[2][2] M[2] M[2][0] M[2][1] M[2][2] M[3] M[3] M[3][0] M[3][1] M[3][2] M[4] M[4] iří vorský (VŠ TUO) ynamická alokace paměti 97 / 458 iří vorský (VŠ TUO) ynamická alokace paměti 98 / 458 ynamická alokace dvourozměrného pole v ++ (pokrač.) Možnosti předávání parametrů funkcím M M[0] M[0][0] M[0][1] M[0][2] M[1] M[1][0] M[1][1] M[1][2] M[2] M[2][0] M[2][1] M[2][2] M[3] M[3][0] M[3][1] M[3][2] M[4] M[4][0] M[4][1] M[4][2] Rozlišujeme tyto způsoby předávání parametrů: hodnotou vznik lokální kopie parametru pointerem předáváno, kopírováno, umístění objektu odkazem předáváno, kopírováno, umístění objektu. Obdoba volání pomocí pointeru, pointer samotný je před programátorem utajen kompilátorem. Předávání polí: Pole jsou vždy předávána jako pointer. void (int []) nebo void (int* ) Pozor na chování operátoru sizeof iří vorský (VŠ TUO) ynamická alokace paměti 99 / 458 iří vorský (VŠ TUO) ynamická alokace paměti 100 / 458

26 Možnosti předávání parametrů funkcím (pokrač.) Pointerová artimetika 1 void (int* ) 2 { 3 cout << sizeof(); 4 } 5 6 int [5]; 7 cout << sizeof(); 8 (); 1 void opyrray1(int* Sourcerray, int* estinationrray, const int N) 2 { 3 for (int i = 0; i < N; i++) 4 { 5 estinationrray[i] = Sourcerray[i]; 6 } 7 } iří vorský (VŠ TUO) ynamická alokace paměti 101 / 458 iří vorský (VŠ TUO) ynamická alokace paměti 102 / 458 Pointerová artimetika Pointerová artimetika 1 void opyrray2(int* Sourcerray, int* estinationrray, const int N) 2 { 3 int* SPtr = Sourcerray; 4 int* Ptr = estinationrray; 5 int* ndptr = Sourcerray + N; 6 while (SPtr!= ndptr) 7 { 8 *Ptr = *SPtr; 9 SPtr += 1; 10 Ptr += 1; 11 } 12 } 1 void opyrray2a(int* Sourcerray, int* estinationrray, const int N) 2 { 3 for (int *SPtr = Sourcerray, *Ptr = estinationrray; SPtr!= Sourcerray + N; *Ptr++ = *SPtr++); 4 } iří vorský (VŠ TUO) ynamická alokace paměti 103 / 458 iří vorský (VŠ TUO) ynamická alokace paměti 104 / 458

27 Kontrolní otázky 1. o je to pointer? aký je význam dat obsažených v pointeru? Nápověda: zaměřte se na vysvětlení pojmu nepřímého adresování. 2. ak deklarujeme pointer p na typ int? 3. ak se nazývá pointer ukazující nikam? 4. o je to operátor reference? Uveďte příklad použití. 5. o je to operátor dereference? Uveďte příklad použití. 6. Předpokládejme, že máme dánu proměnnou int a = 8; a pointer int *p;. akým způsobem zařídíte, aby pointer p ukazoval na proměnnou a? 7. Předpokládejme, že máme deklarovány dva pointery int* p; a int* q;. o se stane po vyhodnocení výrazu p = q;? 8. Předpokládejme, že máme deklarovány dva pointery int* p; a int* q;. o se stane po vyhodnocení výrazu *p = *q;? aké zde můžou nastat problémy? iří vorský (VŠ TUO) ynamická alokace paměti 105 / 458 Kontrolní otázky (pokrač.) 9. eklarujte pointer d na typ double. Proveďte alokaci paměti a dealokaci paměti. aké operátory na to použijete? 10. Máte dynamicky alokovat pole a s prvky typu int, které bude mít 20 prvků. ak to provedete? Pomocí jakého operátoru? 11. e dáno dynamicky alokované pole a s prvky typu int, které má 20 prvků. Máte toto pole dealokovat. ak to provedete? Pomocí jakého operátoru? 12. Máte za úkol dynamicky alokovat dvourozměrné pole a, které bude bude mít R řádků a S sloupců. Prvky budou typu int. ak bude vypadat deklarace pointeru na takové pole? ak se provede jeho alokace v paměti? Lze to provést jednorázovou alokací? 13. Máte za úkol uvolnit z paměti, dealokovat, dvourozměrné pole a, které má R řádků a S sloupců. Prvky jsou typu int. ak to provedete? Lze to provést jednorázovou dealokací? iří vorský (VŠ TUO) ynamická alokace paměti 106 / 458 Kontrolní otázky (pokrač.) 14. Máte pointer daný následující deklarací int* p;. o je na tomto pointeru konstantního a co proměnného? 15. Máte pointer daný následující deklarací const int* p;. o je na tomto pointeru konstantního a co proměnného? 16. Máte pointer daný následující deklarací int* const p;. o je na tomto pointeru konstantního a co proměnného? 17. Máte pointer daný následující deklarací const int* const p;. o je na tomto pointeru konstantního a co proměnného? 18. Popište tři způsoby předávání parametru do funkce. 19. o funkce předáváte pole pomocí pointeru. Ve funkci na takto předané pole (na parametr z hlavičky funkce) aplikujete operátor sizeof? aký výsledek dostanete? Kontrolní otázky (pokrač.) 20. aké operace jsou povoleny provádět s pointery v pointerové aritmetice? Za jakého předpokladu mají tyto operace smysl? Nápověda: Mají tyto operace smysl pokud pointery ukazují na libovolné místo v paměti? Nebo musí být s něčím svázány? 21. ak je možné chápat pole z pohledu pointeru? o vlastně z tohoto pohledu představuje identifikátor pole? 22. Máte dáno pole int a[10]; a ukazatel int* p = a;. Čemu odpovídá výraz *(p+3)? 23. Máte dáno pole int a[10]; a ukazatel int* p = a;. Kam bude ukazovat pointer p po vyhodnocení výrazu p+=2;? 24. Máte dva pointery int *p, *q;. aký je smysl výrazu p == q? 25. Máte dáno pole int a[10]; a dva ukazatele int *p, *q;. Oba tyto ukazatele ukazují na některý prvek v poli a;. aký je smysl výrazů p-q a *p-*q? iří vorský (VŠ TUO) ynamická alokace paměti 107 / 458 iří vorský (VŠ TUO) ynamická alokace paměti 108 / 458

28 Spojová implementace lineárních datových struktur ěkuji za pozornost doc. Mgr. iří vorský, Ph.. Katedra informatiky akulta elektrotechniky a informatiky VŠ TU Ostrava iří vorský (VŠ TUO) ynamická alokace paměti 109 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 110 / 458 Položka seznamu atová reprezentace seznamu 8 struct Listtem 9 { 10 string Value; 11 Listtem* Prev; 12 Listtem* Next; 13 }; Prev Value Next 15 struct List 16 { 17 Listtem* ead; 18 Listtem* Tail; ead 19 }; Tail iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 111 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 112 / 458

29 nicializace prázdného seznamu nicializace seznamu jedním prvkem 3 void nit(list& L) 4 { 5 L.ead = nullptr; 6 L.Tail = nullptr; 7 } ead Tail 9 void nit(list& L, const string& nitvalue) 10 { 11 nternalreatesinglelementlist(l, nitvalue); 12 } nicializaci převedeme na volání další, interní, funkce vytvoření seznamu s jediným prvkem se totiž v kódu několikrát opakuje. iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 113 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 114 / 458 Vytvoření seznamu s jediným prvkem Vložení položky do seznamu 225 void nternalreatesinglelementlist(list& L, const string& NewValue) 226 { 227 L.ead = L.Tail = new Listtem; 228 L.ead->Value = NewValue; 229 L.ead->Prev = nullptr; 230 L.ead->Next = nullptr; 231 } T 25 Vložení položky do seznamu můžeme rozdělit na dvě fáze: 1. alokace nové položky v paměti a 2. zapojení nové položky do struktury seznamu navázání vazeb mezi stávajícími položkami a novou položkou. Zde mohou nastat celkem čtyři situace, podle toho kam novou položku vkládáme: 2.1 před hlavu seznamu funkce Prepend, 2.2 za ocas fronty funkce ppend, 2.3 před danou položku funkce nsertefore a 2.4 za danou položku funkce nsertfter. iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 115 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 116 / 458

30 Vložení položky do seznamu před hlavu seznamu Zde mohou nastat dvě situace: 1. seznam je prázdný vytváříme seznam s jediným prvkem a 2. seznam není prázdný. 32 void Prepend(List& L, const string& NewValue) 33 { 34 if (smpty(l)) 35 { 36 nternalreatesinglelementlist(l, NewValue); 37 } 38 else 39 { 40 Listtem* Newtem = new Listtem; 41 Newtem->Value = NewValue; 42 Newtem->Prev = nullptr; 43 Newtem->Next = L.ead; 44 L.ead->Prev = Newtem; 45 L.ead = Newtem; Vložení položky do seznamu před hlavu seznamu (pokrač.) 46 } 47 } iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 117 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 118 / 458 Vložení položky před hlavu seznamu neprázdný seznam Vložení položky před hlavu seznamu neprázdný seznam 40 Listtem* Newtem = new Listtem; 41 Newtem->Value = NewValue; 42 Newtem->Prev = nullptr; 43 Newtem->Next = L.ead; 44 L.ead->Prev = Newtem; 45 L.ead = Newtem; 40 Listtem* Newtem = new Listtem; 41 Newtem->Value = NewValue; 42 Newtem->Prev = nullptr; 43 Newtem->Next = L.ead; 44 L.ead->Prev = Newtem; 45 L.ead = Newtem; T? T? 4? Newtem 4? iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 119 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 120 / 458

31 Vložení položky před hlavu seznamu neprázdný seznam Vložení položky před hlavu seznamu neprázdný seznam 40 Listtem* Newtem = new Listtem; 41 Newtem->Value = NewValue; 42 Newtem->Prev = nullptr; 43 Newtem->Next = L.ead; 44 L.ead->Prev = Newtem; 45 L.ead = Newtem; 40 Listtem* Newtem = new Listtem; 41 Newtem->Value = NewValue; 42 Newtem->Prev = nullptr; 43 Newtem->Next = L.ead; 44 L.ead->Prev = Newtem; 45 L.ead = Newtem; T? 25 T? 25 Newtem 4? Newtem 4? iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 121 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 122 / 458 Vložení položky před hlavu seznamu neprázdný seznam Vložení položky před hlavu seznamu neprázdný seznam 40 Listtem* Newtem = new Listtem; 41 Newtem->Value = NewValue; 42 Newtem->Prev = nullptr; 43 Newtem->Next = L.ead; 44 L.ead->Prev = Newtem; 45 L.ead = Newtem; 40 Listtem* Newtem = new Listtem; 41 Newtem->Value = NewValue; 42 Newtem->Prev = nullptr; 43 Newtem->Next = L.ead; 44 L.ead->Prev = Newtem; 45 L.ead = Newtem; T? 25 T? 25 Newtem 4? Newtem 4? iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 123 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 124 / 458

32 Vložení položky před hlavu seznamu neprázdný seznam Vložení položky před hlavu seznamu neprázdný seznam 40 Listtem* Newtem = new Listtem; 41 Newtem->Value = NewValue; 42 Newtem->Prev = nullptr; 43 Newtem->Next = L.ead; 44 L.ead->Prev = Newtem; 45 L.ead = Newtem; 40 Listtem* Newtem = new Listtem; 41 Newtem->Value = NewValue; 42 Newtem->Prev = nullptr; 43 Newtem->Next = L.ead; 44 L.ead->Prev = Newtem; 45 L.ead = Newtem; T? 25 T? 25 Newtem 4? 4? iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 125 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 126 / 458 Vložení položky do seznamu na konec seznamu Vložení položky do seznamu na konec seznamu (pokrač.) Zde mohou nastat dvě situace: 1. seznam je prázdný vytváříme seznam s jediným prvkem a 2. seznam není prázdný. 49 void ppend(list& L, const string& NewValue) 50 { 51 if (smpty(l)) 52 { 53 nternalreatesinglelementlist(l, NewValue); 54 } 55 else 56 { 57 Listtem* Newtem = new Listtem; 58 Newtem->Value = NewValue; 59 Newtem->Next = nullptr; 60 L.Tail->Next = Newtem; 61 Newtem->Prev = L.Tail; 62 L.Tail = Newtem; 63 } 64 } iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 127 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 128 / 458

33 Vložení položky na konec seznamu neprázdný seznam Vložení položky na konec seznamu neprázdný seznam 57 Listtem* Newtem = new Listtem; 58 Newtem->Value = NewValue; 59 Newtem->Next = nullptr; 60 L.Tail->Next = Newtem; 61 Newtem->Prev = L.Tail; 62 L.Tail = Newtem; 57 Listtem* Newtem = new Listtem; 58 Newtem->Value = NewValue; 59 Newtem->Next = nullptr; 60 L.Tail->Next = Newtem; 61 Newtem->Prev = L.Tail; 62 L.Tail = Newtem;? 25? 25 Newtem?? T T iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 129 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 130 / 458 Vložení položky na konec seznamu neprázdný seznam Vložení položky na konec seznamu neprázdný seznam 57 Listtem* Newtem = new Listtem; 58 Newtem->Value = NewValue; 59 Newtem->Next = nullptr; 60 L.Tail->Next = Newtem; 61 Newtem->Prev = L.Tail; 62 L.Tail = Newtem; 57 Listtem* Newtem = new Listtem; 58 Newtem->Value = NewValue; 59 Newtem->Next = nullptr; 60 L.Tail->Next = Newtem; 61 Newtem->Prev = L.Tail; 62 L.Tail = Newtem;? 25? 25 Newtem Newtem? 4? 4 T T iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 131 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 132 / 458

34 Vložení položky na konec seznamu neprázdný seznam Vložení položky na konec seznamu neprázdný seznam 57 Listtem* Newtem = new Listtem; 58 Newtem->Value = NewValue; 59 Newtem->Next = nullptr; 60 L.Tail->Next = Newtem; 61 Newtem->Prev = L.Tail; 62 L.Tail = Newtem; 57 Listtem* Newtem = new Listtem; 58 Newtem->Value = NewValue; 59 Newtem->Next = nullptr; 60 L.Tail->Next = Newtem; 61 Newtem->Prev = L.Tail; 62 L.Tail = Newtem;? 25? 25 Newtem Newtem? 4? 4 T T iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 133 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 134 / 458 Vložení položky na konec seznamu neprázdný seznam Vložení položky na konec seznamu neprázdný seznam 57 Listtem* Newtem = new Listtem; 58 Newtem->Value = NewValue; 59 Newtem->Next = nullptr; 60 L.Tail->Next = Newtem; 61 Newtem->Prev = L.Tail; 62 L.Tail = Newtem; 57 Listtem* Newtem = new Listtem; 58 Newtem->Value = NewValue; 59 Newtem->Next = nullptr; 60 L.Tail->Next = Newtem; 61 Newtem->Prev = L.Tail; 62 L.Tail = Newtem;? 25? 25 Newtem? 4? 4 T T iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 135 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 136 / 458

35 Vložení položky do seznamu před danou položku Zde mohou nastat dvě situace: 1. daná položka je hlavou seznamu využijeme funkci Prepend a 2. daná položka je obecně uvnitř seznamu. 66 void nsertefore(list& L, Listtem* urrenttem, const string& NewValue) 67 { 68 if (urrenttem!= nullptr) 69 { 70 if (urrenttem == L.ead) 71 { 72 Prepend(L, NewValue); 73 } 74 else 75 { 76 Listtem* Newtem = new Listtem; 77 Newtem->Value = NewValue; 78 Listtem* P = urrenttem->prev; Vložení položky do seznamu před danou položku (pokrač.) 79 P->Next = Newtem; 80 Newtem->Prev = P; 81 urrenttem->prev = Newtem; 82 Newtem->Next = urrenttem; 83 } 84 } 85 } iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 137 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 138 / 458 Vložení položky do seznamu před danou položku obecně Vložení položky do seznamu před danou položku obecně 76 Listtem* Newtem = new Listtem; 77 Newtem->Value = NewValue; 78 Listtem* P = urrenttem->prev; 79 P->Next = Newtem; 80 Newtem->Prev = P; 81 urrenttem->prev = Newtem; 82 Newtem->Next = urrenttem; 76 Listtem* Newtem = new Listtem; 77 Newtem->Value = NewValue; 78 Listtem* P = urrenttem->prev; 79 P->Next = Newtem; 80 Newtem->Prev = P; 81 urrenttem->prev = Newtem; 82 Newtem->Next = urrenttem;? 25? 25 Newtem urrenttem urrenttem 9? 9? iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 139 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 140 / 458

36 Vložení položky do seznamu před danou položku obecně Vložení položky do seznamu před danou položku obecně 76 Listtem* Newtem = new Listtem; 77 Newtem->Value = NewValue; 78 Listtem* P = urrenttem->prev; 79 P->Next = Newtem; 80 Newtem->Prev = P; 81 urrenttem->prev = Newtem; 82 Newtem->Next = urrenttem; 76 Listtem* Newtem = new Listtem; 77 Newtem->Value = NewValue; 78 Listtem* P = urrenttem->prev; 79 P->Next = Newtem; 80 Newtem->Prev = P; 81 urrenttem->prev = Newtem; 82 Newtem->Next = urrenttem;? 25 Newtem? 25 Newtem urrenttem urrenttem 4 4 P 9? 9? iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 141 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 142 / 458 Vložení položky do seznamu před danou položku obecně Vložení položky do seznamu před danou položku obecně 76 Listtem* Newtem = new Listtem; 77 Newtem->Value = NewValue; 78 Listtem* P = urrenttem->prev; 79 P->Next = Newtem; 80 Newtem->Prev = P; 81 urrenttem->prev = Newtem; 82 Newtem->Next = urrenttem; 76 Listtem* Newtem = new Listtem; 77 Newtem->Value = NewValue; 78 Listtem* P = urrenttem->prev; 79 P->Next = Newtem; 80 Newtem->Prev = P; 81 urrenttem->prev = Newtem; 82 Newtem->Next = urrenttem;? 25 Newtem? 25 Newtem urrenttem urrenttem 4 4 P P 9? 9? iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 143 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 144 / 458

37 Vložení položky do seznamu před danou položku obecně Vložení položky do seznamu před danou položku obecně 76 Listtem* Newtem = new Listtem; 77 Newtem->Value = NewValue; 78 Listtem* P = urrenttem->prev; 79 P->Next = Newtem; 80 Newtem->Prev = P; 81 urrenttem->prev = Newtem; 82 Newtem->Next = urrenttem; 76 Listtem* Newtem = new Listtem; 77 Newtem->Value = NewValue; 78 Listtem* P = urrenttem->prev; 79 P->Next = Newtem; 80 Newtem->Prev = P; 81 urrenttem->prev = Newtem; 82 Newtem->Next = urrenttem;? 25 Newtem? 25 Newtem urrenttem urrenttem 4 4 P P 9? 9? iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 145 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 146 / 458 Vložení položky do seznamu před danou položku obecně Vložení položky do seznamu za danou položku 76 Listtem* Newtem = new Listtem; 77 Newtem->Value = NewValue; 78 Listtem* P = urrenttem->prev; 79 P->Next = Newtem; 80 Newtem->Prev = P; 81 urrenttem->prev = Newtem; 82 Newtem->Next = urrenttem;? ? urrenttem Zde mohou nastat dvě situace: 1. daná položka je ocasem seznamu využijeme funkci ppend a 2. daná položka je obecně uvnitř seznamu. 87 void nsertfter(list& L, Listtem* urrenttem, const string& NewValue ) 88 { 89 if (urrenttem!= nullptr) 90 { 91 if (urrenttem == L.Tail) 92 { 93 ppend(l, NewValue); 94 } 95 else 96 { 97 Listtem* Newtem = new Listtem; 98 Newtem->Value = NewValue; 99 Listtem* N = urrenttem->next; iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 147 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 148 / 458

38 Vložení položky do seznamu za danou položku (pokrač.) Vložení položky do seznamu za danou položku obecně 100 N->Prev = Newtem; 101 Newtem->Next = N; 102 urrenttem->next = Newtem; 103 Newtem->Prev = urrenttem; 104 } 105 } 106 } 97 Listtem* Newtem = new Listtem; 98 Newtem->Value = NewValue; 99 Listtem* N = urrenttem->next; 100 N->Prev = Newtem; 101 Newtem->Next = N; 102 urrenttem->next = Newtem; 103 Newtem->Prev = urrenttem;? 25 urrenttem 9? iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 149 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 150 / 458 Vložení položky do seznamu za danou položku obecně Vložení položky do seznamu za danou položku obecně 97 Listtem* Newtem = new Listtem; 98 Newtem->Value = NewValue; 99 Listtem* N = urrenttem->next; 100 N->Prev = Newtem; 101 Newtem->Next = N; 102 urrenttem->next = Newtem; 103 Newtem->Prev = urrenttem; 97 Listtem* Newtem = new Listtem; 98 Newtem->Value = NewValue; 99 Listtem* N = urrenttem->next; 100 N->Prev = Newtem; 101 Newtem->Next = N; 102 urrenttem->next = Newtem; 103 Newtem->Prev = urrenttem;? 25 Newtem? 25 Newtem 4 urrenttem 9? urrenttem 9? iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 151 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 152 / 458

39 Vložení položky do seznamu za danou položku obecně Vložení položky do seznamu za danou položku obecně 97 Listtem* Newtem = new Listtem; 98 Newtem->Value = NewValue; 99 Listtem* N = urrenttem->next; 100 N->Prev = Newtem; 101 Newtem->Next = N; 102 urrenttem->next = Newtem; 103 Newtem->Prev = urrenttem; 97 Listtem* Newtem = new Listtem; 98 Newtem->Value = NewValue; 99 Listtem* N = urrenttem->next; 100 N->Prev = Newtem; 101 Newtem->Next = N; 102 urrenttem->next = Newtem; 103 Newtem->Prev = urrenttem;? 25 Newtem? 25 Newtem N N 4 4 urrenttem 9? urrenttem 9? iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 153 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 154 / 458 Vložení položky do seznamu za danou položku obecně Vložení položky do seznamu za danou položku obecně 97 Listtem* Newtem = new Listtem; 98 Newtem->Value = NewValue; 99 Listtem* N = urrenttem->next; 100 N->Prev = Newtem; 101 Newtem->Next = N; 102 urrenttem->next = Newtem; 103 Newtem->Prev = urrenttem; 97 Listtem* Newtem = new Listtem; 98 Newtem->Value = NewValue; 99 Listtem* N = urrenttem->next; 100 N->Prev = Newtem; 101 Newtem->Next = N; 102 urrenttem->next = Newtem; 103 Newtem->Prev = urrenttem;? 25 Newtem? 25 Newtem N N 4 4 urrenttem 9? urrenttem 9? iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 155 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 156 / 458

40 Vložení položky do seznamu za danou položku obecně Vložení položky do seznamu za danou položku obecně 97 Listtem* Newtem = new Listtem; 98 Newtem->Value = NewValue; 99 Listtem* N = urrenttem->next; 100 N->Prev = Newtem; 101 Newtem->Next = N; 102 urrenttem->next = Newtem; 103 Newtem->Prev = urrenttem; 97 Listtem* Newtem = new Listtem; 98 Newtem->Value = NewValue; 99 Listtem* N = urrenttem->next; 100 N->Prev = Newtem; 101 Newtem->Next = N; 102 urrenttem->next = Newtem; 103 Newtem->Prev = urrenttem;? 25 Newtem? 25 N 4 4 urrenttem 9? urrenttem 9? iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 157 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 158 / 458 Odebrání položky ze seznamu Odebrání položky ze seznamu (pokrač.) Odebrání položky ze seznamu můžeme rozdělit na dvě fáze: 1. vlastní odebrání položky ze seznamu odstranění vazeb mezi ostatními položkami seznamu a odebíranou položkou. Zde mohou nastat celkem čtyři situace: 1.1 seznam obsahuje jedinou položku řádky 235 až 239, 1.2 odebíraná položka je hlavou seznamu řádky 242 až 246, 1.3 odebíraná položka je ocasem seznamu řádky 249 až 253 nebo 1.4 odebíraná položka leží obecně uvnitř seznamu řádky 256 až uvolnění položky z paměti řádek void nternalremove(list& L, const Listtem* temtoelete) 234 { 235 if (temtoelete == L.ead && temtoelete == L.Tail) 236 { 237 L.ead = nullptr; 238 L.Tail = nullptr; 239 } 240 else 241 { 242 if (temtoelete == L.ead) 243 { 244 L.ead = L.ead->Next; 245 L.ead->Prev = nullptr; 246 } 247 else 248 { 249 if (temtoelete == L.Tail) 250 { 251 L.Tail = L.Tail->Prev; iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 159 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 160 / 458

41 Odebrání položky ze seznamu (pokrač.) Odebrání položky ze seznamu jediná položka 252 L.Tail->Next = nullptr; 253 } 254 else 255 { 256 Listtem* P = temtoelete->prev; 257 Listtem* N = temtoelete->next; 258 P->Next = N; 259 N->Prev = P; 260 } 261 } 262 } 263 delete temtoelete; 264 } 235 if (temtoelete == L.ead && temtoelete == L.Tail) 236 { 237 L.ead = nullptr; 238 L.Tail = nullptr; 239 } T 25 temtoelete iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 161 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 162 / 458 Odebrání položky ze seznamu jediná položka Odebrání položky ze seznamu jediná položka 235 if (temtoelete == L.ead && temtoelete == L.Tail) 236 { 237 L.ead = nullptr; 238 L.Tail = nullptr; 239 } 235 if (temtoelete == L.ead && temtoelete == L.Tail) 236 { 237 L.ead = nullptr; 238 L.Tail = nullptr; 239 } temtoelete temtoelete T 25 T 25 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 163 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 164 / 458

42 Odebrání položky ze seznamu hlava Odebrání položky ze seznamu hlava 242 if (temtoelete == L.ead) 243 { 244 L.ead = L.ead->Next; 245 L.ead->Prev = nullptr; 246 } 242 if (temtoelete == L.ead) 243 { 244 L.ead = L.ead->Next; 245 L.ead->Prev = nullptr; 246 } T? 25 T? 25 temtoelete 4? temtoelete 4? iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 165 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 166 / 458 Odebrání položky ze seznamu hlava Odebrání položky ze seznamu ocas 242 if (temtoelete == L.ead) 243 { 244 L.ead = L.ead->Next; 245 L.ead->Prev = nullptr; 246 } 249 if (temtoelete == L.Tail) 250 { 251 L.Tail = L.Tail->Prev; 252 L.Tail->Next = nullptr; 253 } temtoelete T? 25?? 25 T 4 temtoelete 4? iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 167 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 168 / 458

43 Odebrání položky ze seznamu ocas Odebrání položky ze seznamu ocas 249 if (temtoelete == L.Tail) 250 { 251 L.Tail = L.Tail->Prev; 252 L.Tail->Next = nullptr; 253 } 249 if (temtoelete == L.Tail) 250 { 251 L.Tail = L.Tail->Prev; 252 L.Tail->Next = nullptr; 253 } temtoelete temtoelete?? 25?? 25 T 4 T 4 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 169 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 170 / 458 Odebrání položky ze seznamu obecná pozice Odebrání položky ze seznamu obecná pozice 256 Listtem* P = temtoelete->prev; 257 Listtem* N = temtoelete->next; 258 P->Next = N; 259 N->Prev = P; 256 Listtem* P = temtoelete->prev; 257 Listtem* N = temtoelete->next; 258 P->Next = N; 259 N->Prev = P;? 25 temtoelete? 25 temtoelete 4 4 9? P 9? iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 171 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 172 / 458

44 Odebrání položky ze seznamu obecná pozice Obousměrný seznam deklarace 256 Listtem* P = temtoelete->prev; 257 Listtem* N = temtoelete->next; 258 P->Next = N; 259 N->Prev = P; 1 #pragma once 2 3 #include <iostream> 4 #include <string> 5 6 using namespace std;? 25 4 temtoelete N 7 8 struct Listtem 9 { 10 string Value; 11 Listtem* Prev; 12 Listtem* Next; 13 }; P 9? struct List 16 { 17 Listtem* ead; 18 Listtem* Tail; 19 }; iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 173 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 174 / 458 Obousměrný seznam deklarace (pokrač.) Obousměrný seznam deklarace (pokrač.) void nit(list& L); 22 void nit(list& L, const string& nitvalue); 23 void nit(list& L, const string nitvalues[], const int N); 24 void nit(list& L, const List& Other); void Prepend(List& L, const string& NewValue); 27 void ppend(list& L, const string& NewValue); 28 void nsertefore(list& L, Listtem* urrenttem, const string& NewValue); 29 void nsertfter(list& L, Listtem* urrenttem, const string& NewValue ); void Removeirst(List& L); 32 void RemoveLast(List& L); 33 void Remove(List& L, const string& ValueToRemove); 34 void Removell(List& L, const string& ValueToRemove); 35 void Remove(List& L, const Listtem* temtoremove); 36 void lear(list& L); Listtem* Search(const List& L, const string& Value); 39 Listtem* ReverseSearch(const List& L, const string& Value); bool ontains(const List& L, const string& Value); bool smpty(const List& L); 44 int ount(const List& L); void Report(const List& L); 47 void ReportStructure(const List& L); void nternalreatesinglelementlist(list& L, const string& NewValue); 50 void nternalremove(list& L, const Listtem* temtoelete); iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 175 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 176 / 458

45 Obousměrný seznam implementace 1 #include "List.h" 2 3 void nit(list& L) 4 { 5 L.ead = nullptr; 6 L.Tail = nullptr; 7 } 8 9 void nit(list& L, const string& nitvalue) 10 { 11 nternalreatesinglelementlist(l, nitvalue); 12 } void nit(list& L, const string nitvalues[], const int N) 15 { 16 nit(l); 17 for (int i = 0; i < N; i++) 18 { 19 ppend(l, nitvalues[i]); Obousměrný seznam implementace (pokrač.) 20 } 21 } void nit(list& L, const List& Other) 24 { 25 nit(l); 26 for (Listtem* p = Other.ead; p!= nullptr; p = p->next) 27 { 28 ppend(l, p->value); 29 } 30 } void Prepend(List& L, const string& NewValue) 33 { 34 if (smpty(l)) 35 { 36 nternalreatesinglelementlist(l, NewValue); 37 } 38 else iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 177 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 178 / 458 Obousměrný seznam implementace (pokrač.) Obousměrný seznam implementace (pokrač.) 39 { 40 Listtem* Newtem = new Listtem; 41 Newtem->Value = NewValue; 42 Newtem->Prev = nullptr; 43 Newtem->Next = L.ead; 44 L.ead->Prev = Newtem; 45 L.ead = Newtem; 46 } 47 } void ppend(list& L, const string& NewValue) 50 { 51 if (smpty(l)) 52 { 53 nternalreatesinglelementlist(l, NewValue); 54 } 55 else 56 { 57 Listtem* Newtem = new Listtem; 58 Newtem->Value = NewValue; 59 Newtem->Next = nullptr; 60 L.Tail->Next = Newtem; 61 Newtem->Prev = L.Tail; 62 L.Tail = Newtem; 63 } 64 } void nsertefore(list& L, Listtem* urrenttem, const string& NewValue) 67 { 68 if (urrenttem!= nullptr) 69 { 70 if (urrenttem == L.ead) 71 { 72 Prepend(L, NewValue); 73 } 74 else 75 { iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 179 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 180 / 458

46 Obousměrný seznam implementace (pokrač.) 76 Listtem* Newtem = new Listtem; 77 Newtem->Value = NewValue; 78 Listtem* P = urrenttem->prev; 79 P->Next = Newtem; 80 Newtem->Prev = P; 81 urrenttem->prev = Newtem; 82 Newtem->Next = urrenttem; 83 } 84 } 85 } void nsertfter(list& L, Listtem* urrenttem, const string& NewValue ) 88 { 89 if (urrenttem!= nullptr) 90 { 91 if (urrenttem == L.Tail) 92 { 93 ppend(l, NewValue); Obousměrný seznam implementace (pokrač.) 94 } 95 else 96 { 97 Listtem* Newtem = new Listtem; 98 Newtem->Value = NewValue; 99 Listtem* N = urrenttem->next; 100 N->Prev = Newtem; 101 Newtem->Next = N; 102 urrenttem->next = Newtem; 103 Newtem->Prev = urrenttem; 104 } 105 } 106 } void Removeirst(List& L) 109 { 110 if (!smpty(l)) 111 { 112 nternalremove(l, L.ead); iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 181 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 182 / 458 Obousměrný seznam implementace (pokrač.) Obousměrný seznam implementace (pokrač.) 113 } 114 } void RemoveLast(List& L) 117 { 118 if (!smpty(l)) 119 { 120 nternalremove(l, L.Tail); 121 } 122 } void Remove(List& L, const string& ValueToRemove) 125 { 126 Listtem* p = Search(L, ValueToRemove); 127 if (p!= nullptr) 128 { 129 nternalremove(l, p); 130 } 131 } void Removell(List& L, const string& ValueToRemove) 134 { 135 Listtem* p; 136 while ((p = Search(L, ValueToRemove))!= nullptr) 137 { 138 nternalremove(l, p); 139 } 140 } void Remove(List& L, const Listtem* temtoremove) 143 { 144 if (temtoremove!= nullptr) 145 { 146 nternalremove(l, temtoremove); 147 } 148 } void lear(list& L) iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 183 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 184 / 458

47 Obousměrný seznam implementace (pokrač.) Obousměrný seznam implementace (pokrač.) 151 { 152 while (!smpty(l)) 153 { 154 nternalremove(l, L.ead); 155 } 156 } Listtem* Search(const List& L, const string& Value) 159 { 160 for (Listtem* p = L.ead; p!= nullptr; p = p->next) 161 { 162 if (p->value == Value) 163 { 164 return p; 165 } 166 } 167 return nullptr; 168 } Listtem* ReverseSearch(const List& L, const string& Value) 171 { 172 for (Listtem* p = L.Tail; p!= nullptr; p = p->prev) 173 { 174 if (p->value == Value) 175 { 176 return p; 177 } 178 } 179 return nullptr; 180 } bool ontains(const List& L, const string& Value) 183 { 184 return Search(L, Value)!= nullptr; 185 } bool smpty(const List& L) 188 { iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 185 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 186 / 458 Obousměrný seznam implementace (pokrač.) 189 return L.ead == nullptr; 190 } int ount(const List& L) 193 { 194 int counter = 0; 195 for (Listtem* p = L.ead; p!= nullptr; p = p->next) 196 { 197 counter += 1; 198 } 199 return counter; 200 } void Report(const List& L) 203 { 204 for (Listtem* p = L.ead; p!= nullptr; p = p->next) 205 { 206 cout << p->value << "\t"; 207 } Obousměrný seznam implementace (pokrač.) 208 cout << endl; 209 } void ReportStructure(const List& L) 212 { 213 cout << "L.ead: " << L.ead << endl; 214 cout << "L.Tail: " << L.Tail << endl; 215 for (Listtem* p = L.ead; p!= nullptr; p = p->next) 216 { 217 cout << "tem address: " << p << endl; 218 cout << "Value: " << p->value << endl; 219 cout << "Prev: " << p->prev << endl; 220 cout << "Next: " << p->next << endl; 221 cout << endl; 222 } 223 } void nternalreatesinglelementlist(list& L, const string& NewValue) 226 { iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 187 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 188 / 458

48 Obousměrný seznam implementace (pokrač.) 227 L.ead = L.Tail = new Listtem; 228 L.ead->Value = NewValue; 229 L.ead->Prev = nullptr; 230 L.ead->Next = nullptr; 231 } void nternalremove(list& L, const Listtem* temtoelete) 234 { 235 if (temtoelete == L.ead && temtoelete == L.Tail) 236 { 237 L.ead = nullptr; 238 L.Tail = nullptr; 239 } 240 else 241 { 242 if (temtoelete == L.ead) 243 { 244 L.ead = L.ead->Next; 245 L.ead->Prev = nullptr; Obousměrný seznam implementace (pokrač.) 246 } 247 else 248 { 249 if (temtoelete == L.Tail) 250 { 251 L.Tail = L.Tail->Prev; 252 L.Tail->Next = nullptr; 253 } 254 else 255 { 256 Listtem* P = temtoelete->prev; 257 Listtem* N = temtoelete->next; 258 P->Next = N; 259 N->Prev = P; 260 } 261 } 262 } 263 delete temtoelete; 264 } iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 189 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 190 / 458 Kontrolní otázky 1. Máme danou strukturu a čtyři proměnné: 1 struct MyStruct 2 { 3 int d; 4 double Value; 5 }; 6 7 MyStruct a, b; 8 MyStruct *p, *q; o se stane pokud provedu a = b;? co pokud provedu p = q;? 2. ak alokuji dynamicky strukturu z předchozí otázky? Pomocí jakého operátoru? 3. ak uvolním z paměti dynamicky alokovanou strukturu, kterou jsem vytvořil v předchozí otázce? Kontrolní otázky (pokrač.) 4. Mám deklarovanou proměnnou MyStruct a;. ak se dostanu k položce Value v proměnné a? 5. Mám deklarovanou proměnnou MyStruct *p;. ak 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;. ak se dostanu k položce Value v proměnné p pomocí operátoru dereference? 7. Mám následující kód: 1 double *p = new double; 2 delete p; 3 *p = 15; o tento kód způsobí? 8. Mám následující kód: 1 double *p = new double; 2 p = NULL; iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 191 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 192 / 458

49 Kontrolní otázky (pokrač.) o tento kód způsobí? K čemu v paměti dojde? 9. Mám následující kód: 1 double *p = new double; 2 p = NULL; 3 *p = 15; o 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? 12. o je to zarážka (angl. sentinel)? o nahrazuje? 13. K čemu slouží zarážka? iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 193 / 458 Kontrolní otázky (pokrač.) 14. ak se změní algoritmus vkládání prvku na začátek obousměrného seznamu, pokud využijeme zarážku? 15. ak 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). ále se zaměřte na možnou změnu kapacity seznamu. 18. estliže budu k seznamu přistupovat pouze pomocí funkcí nsert, elete nebo Search a změním implementaci seznamu. Musím měnit i okolní kód, kde se seznam využívá? 19. Pokud implementuji frontu pomocí dynamických struktur, potřebuji kruhový buffer a podobné triky s polem? iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 194 / 458 Kontrolní otázky (pokrač.) 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. aký 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. ak spočítáte počet položek v seznamu? Má na tento algoritmus vliv zda je seznam obousměrný nebo jednosměrný? 23. ak 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. 25. Popište algoritmus vkládání na začátek obousměrného seznamu. ěkuji za pozornost iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 195 / 458 iří vorský (VŠ TUO) Spojová implementace lineárních datových struktur 196 / 458

50 rafy motivace rafy doc. Mgr. iří vorský, Ph.. Katedra informatiky akulta elektrotechniky a informatiky VŠ TU Ostrava edná se o reprezentaci množiny objektů, u které chceme znázornit, že některé prvky jsou propojeny. Objektům se přiřadí vrcholy a jejich propojení značí hrany mezi nimi. rafy slouží jako abstrakce mnoha různých problémů. Často se jedná o zjednodušený model nějaké skutečné sítě (například dopravní), který zdůrazňuje topologické vlastnosti objektů (vrcholů) a zanedbává geometrické vlastnosti, například přesnou polohu. iří vorský (VŠ TUO) rafy 197 / 458 iří vorský (VŠ TUO) rafy 198 / 458 rafy motivace Neorientovaný graf Příklady abstrakce 1. kousek železniční sítě Č, graf jako mapa, reálné názvy stanic, zachován fyzický tvar tratí, 2. zachováme topografické rozložení stanic a jejich názvy, tratě překreslíme úsečkami, 3. zachováme pouze názvy stanic, jejich rozložení můžeme libovolně měnit, u některých nakreslení grafu se budou hrany křížit u jiných ne, některá nakreslení grafu jsou pro lidské oko přehlednější 4. vynecháme názvy stanic a použijeme místo nich přirozená čísla. alší možné abstrakce Vcholy grafu nemusí být nutně stanice. raf můžeme chápat i tak, že vrcholy jsou jednotlivé tratě (čísla tratí). vě tratě spojíme hranou, pokud tyto dvě tratě na sebe navazují. V tomto případě hrany v grafu vyjadřují logický vztah, binární relaci být propojen. iří vorský (VŠ TUO) rafy 199 / 458 efinice Neorientovaným grafem nazýváme dvojici = (V, ), kde V je množina uzlů, je množina jednoprvkových nebo dvouprvkových podmnožin V. Prvky množiny se nazývají hrany grafu a prvky množiny V se nazývají uzly. Literatura iří emel: rafy a jejich aplikace, cademia, Praha, 2002 iří vorský (VŠ TUO) rafy 200 / 458

51 Neorientovaný graf, pokračování Neorientovaný graf, pokračování rany grafu Mějme hranu e, kde e = {u, v}. Uzlům u a v říkáme krajní uzly hrany e. Říkáme také, že jsou incidentní (nebo že incidují) s hranou e. O hraně e pak říkáme, že je incidentní s těmito uzly nebo také že spojuje tyto uzly. efinice ranu spojující uzel se sebou samým nazýváme smyčkou. udeme uvažovat pouze konečné grafy, tedy grafy s konečnou množinou uzlů V. Nekonečné grafy necháme stranou. Vzhledem k tomu, že jiné než neorientované grafy nebudeme definovat, můžeme označení neorientovaný vynechávat. iří vorský (VŠ TUO) rafy 201 / 458 iří vorský (VŠ TUO) rafy 202 / 458 Neorientovaný graf, pokračování Sled efinice Stupeň uzlu je počet hran s uzlem incidentních, tj. Věta s(v) = {e v e}. Součet stupňů uzlů libovolného grafu = (V, ) je roven dvojnásobku počtu jeho hran. s(v) = 2 ůkaz. v V Zřejmý (v sumě se každá hrana počítá dvakrát). efinice Posloupnost navazujících uzlů a hran v 1, e 1, v 2,..., v n, e n, v n+1, kde e i = {v i, v i+1 } pro 1 i n nazýváme (neorientovaným) sledem. efinice Sled, v němž se neopakuje žádný uzel nazýváme cestou. Tedy v i v j, 1 i j n. Číslo n pak nazýváme délkou cesty. Z faktu, že se v cestě neopakují uzly, vyplývá, že se v ní neopakují ani hrany. Každá cesta je tedy zároveň i sledem. iří vorský (VŠ TUO) rafy 203 / 458 iří vorský (VŠ TUO) rafy 204 / 458

52 Kružnice cyklický graf efinice Sled, který má alespoň jednu hranu a jehož počáteční a koncový uzel splývají, nazýváme uzavřeným sledem. efinice Uzavřená cesta je uzavřený sled, v němž se neopakují uzly ani hrany. Uzavřená cesta se nazývá také kružnice. efinice raf se nazývá acyklický, jestliže neobsahuje kružnici. V definici kružnice jsme museli zakázat kromě opakování uzlů i opakování hran proto, aby posloupnost v 1, e 1, v 2, e 1, v 1 nemohla být považována za kružnici. iří vorský (VŠ TUO) rafy 205 / 458 iří vorský (VŠ TUO) rafy 206 / 458 Souvislý graf rafy příklady Vizualizace grafu efinice raf se nazývá souvislý, jestliže mezi každými dvěma uzly existuje cesta. Matematický zápis 2 Věta Nechť = (V, ) je souvislý graf. Pak platí V 1. ůkaz. Zřejmý. = (V, ) V = {1, 2, 3, 4, 5, 6} = {{1, 2}, {1, 3}, {1, 5}, {1, 6}, {2, 3}, {2, 4}, {3, 4}, {4, 5}, {4, 6}} iří vorský (VŠ TUO) rafy 207 / 458 iří vorský (VŠ TUO) rafy 208 / 458

53 rafy příklady Způsoby zadání grafu Vizualizace grafu esta Uzly {1, 2, 3, 4} spolu s hranami {1, 2}, {2, 3}, {3, 4} tvoří cestu. Kružnice rany {1, 2}, {2, 3}, {3, 4}, {4, 5}, {5, 1} tvoří kružnici grafickou formou: prostě obrázkem, asi nejsrozumitelnější forma pro člověka, vhodné pro grafy s malým počtem vrcholů prakticky nemožnost zpracování počítačem. výčtem vrcholů a hran nebo maticí. 6 iří vorský (VŠ TUO) rafy 209 / 458 iří vorský (VŠ TUO) rafy 210 / 458 Matice sousednosti ynamicky alokované datové struktury Vizualizace grafu 2 Matice sousednosti iří vorský (VŠ TUO) rafy 211 / 458 iří vorský (VŠ TUO) rafy 212 / 458

Dynamická alokace paměti

Dynamická alokace paměti Dynamická alokace paměti 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) Dynamická alokace

Více

Lineární datové struktury

Lineární datové struktury Lineární datové struktury 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) Lineární datové

Více

Úvodní přednáška. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

Úvodní přednáška. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Úvodní přednáška doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 28. března 2018 Jiří Dvorský (VŠB TUO) Úvodní přednáška 1 / 384

Více

Úvodní přednáška. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

Úvodní přednáška. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Úvodní přednáška 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) Úvodní přednáška 1 / 315

Více

Lineární datové struktury

Lineární datové struktury Lineární datové struktury doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 5. března 2019 Jiří Dvorský (VŠB TUO) Lineární datové

Více

Úvodní přednáška. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

Úvodní přednáška. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Úvodní přednáška doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 12. září 2016 Jiří Dvorský (VŠB TUO) Úvodní přednáška 1 / 346 Osnova

Více

Úvodní přednáška. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

Úvodní přednáška. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Úvodní přednáška doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 21. září 2018 Jiří Dvorský (VŠB TUO) Úvodní přednáška 1 / 430 Osnova

Více

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

Spojová implementace lineárních datových struktur 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

Více

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

Algoritmy II. Otázky k průběžnému testu znalostí Algoritmy II Otázky k průběžnému testu znalostí Revize ze dne 19. února 2018 2 Lineární datové struktury 1 1. Vysvětlete co znamená, že zásobník představuje paměť typu LIFO. 2. Co je to vrchol zásobníku?

Více

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

Programování v C++, 2. cvičení Programování v C++, 2. cvičení 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 Operátory new a delete 2 3 Operátory new a delete minule

Více

Základní datové struktury

Základní datové struktury Základní datové struktury Martin Trnečka Katedra informatiky, Přírodovědecká fakulta Univerzita Palackého v Olomouci 4. listopadu 2013 Martin Trnečka (UPOL) Algoritmická matematika 1 4. listopadu 2013

Více

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

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Procesor Procesorem je objekt, který vykonává algoritmem popisovanou

Více

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

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21. Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 21. září 2018 Jiří Dvorský (VŠB TUO) Vyhledávání 242 / 433 Osnova přednášky

Více

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Datové struktury Daniela Szturcová

Více

Konstruktory a destruktory

Konstruktory a destruktory Konstruktory a destruktory Nedostatek atributy po vytvoření objektu nejsou automaticky inicializovány hodnota atributů je náhodná vytvoření metody pro inicializaci, kterou musí programátor explicitně zavolat,

Více

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

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4 Fronta (Queue) Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Fronta uplatňuje mechanismus přístupu FIFO first

Více

Datové typy a struktury

Datové typy a struktury atové typy a struktury Jednoduché datové typy oolean = logická hodnota (true / false) K uložení stačí 1 bit často celé slovo (1 byte) haracter = znak Pro 8-bitový SII kód stačí 1 byte (256 možností) Pro

Více

Dynamické datové struktury I.

Dynamické datové struktury I. Dynamické datové struktury I. Seznam. Fronta. Zásobník. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz

Více

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

Programování v C++ 2, 4. cvičení Programování v C++ 2, 4. cvičení statické atributy a metody, konstruktory 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Přístupová práva

Více

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Datové struktury Daniela Szturcová

Více

Kolekce, cyklus foreach

Kolekce, cyklus foreach Kolekce, cyklus foreach Jen informativně Kolekce = seskupení prvků (objektů) Jednu již známe pole (Array) Kolekce v C# = třída, která implementuje IEnumerable (ICollection) Cyklus foreach ArrayList pro

Více

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

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12. Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 12. září 2016 Jiří Dvorský (VŠB TUO) Vyhledávání 201 / 344 Osnova přednášky

Více

Abstraktní datové typy

Abstraktní datové typy Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní datové typy BI-PA2, 2011, Přednáška 10 1/27 Abstraktní datové typy Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky,

Více

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

Pointery II. Jan Hnilica Počítačové modelování 17 Pointery II 1 Pointery a pole Dosavadní způsob práce s poli zahrnoval: definici pole jakožto kolekce proměnných (prvků) jednoho typu, umístěných v paměti za sebou int pole[10]; práci s jednotlivými prvky

Více

NMIN102 Programování /2 Z, Zk

NMIN102 Programování /2 Z, Zk NMIN102 Programování 2 --- 2/2 Z, Zk Pavel Töpfer Katedra softwaru a výuky informatiky MFF UK MFF Malostranské nám., 4. patro, pracovna 404 pavel.topfer@mff.cuni.cz http://ksvi.mff.cuni.cz/~topfer Pavel

Více

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

2 Datové struktury. Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky 25 Pole Datová struktura kolekce elementů (hodnot či proměnných), identifikovaných jedním nebo více indexy, ze kterých

Více

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

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ 1) PROGRAM, ZDROJOVÝ KÓD, PŘEKLAD PROGRAMU 3 2) HISTORIE TVORBY PROGRAMŮ 3 3) SYNTAXE A SÉMANTIKA 3 4) SPECIFIKACE

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

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

Da D to t v o é v ty t py IB111: Datové typy Datové typy IB111: Datové typy Data a algoritmizace jaká data potřebuji pro vyřešení problému? jak budu data reprezentovat? jaké operaci s nimi potřebuji provádět? Navržení práce s daty je velice důležité

Více

Mělká a hluboká kopie

Mělká a hluboká kopie Karel Müller, Josef Vogel (ČVUT FIT) Mělká a hluboká kopie BI-PA2, 2011, Přednáška 5 1/28 Mělká a hluboká kopie Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky, Fakulta

Více

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

Maturitní témata. IKT, školní rok 2017/18. 1 Struktura osobního počítače. 2 Operační systém. 3 Uživatelský software. Maturitní témata IKT, školní rok 2017/18 1 Struktura osobního počítače Von Neumannova architektura: zakreslete, vysvětlete její smysl a popište, jakým způsobem se od ní běžné počítače odchylují. Osobní

Více

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.

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. Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus

Více

Dynamické datové struktury IV.

Dynamické datové struktury IV. Dynamické datové struktury IV. Prioritní fronta. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra

Více

TÉMATICKÝ OKRUH TZD, DIS a TIS

TÉMATICKÝ OKRUH TZD, DIS a TIS TÉMATICKÝ OKRUH TZD, DIS a TIS Číslo otázky : 13. Otázka : Základní datové struktury (pole, zásobník, binární strom atd.), datové struktury vhodné pro fyzickou implementaci relačních dat v SŘBD (hašovací

Více

ADT/ADS = abstraktní datové typy / struktury

ADT/ADS = abstraktní datové typy / struktury DT = datové typy obor hodnot, které může proměnná nabývat, s operacemi na tomto oboru určen: obor hodnot + výpočetní operace např. INT = { 2 147 483 648 až +2 147 483 647} + {+,,*,/,} ADT/ADS = abstraktní

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

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

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10 Úlohy- 2.cvičení 1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10 2. Převeďte dané desetinné číslo do dvojkové soustavy (DEC -> BIN): a) 0,8125 10 b) 0,35 10

Více

Binární vyhledávací stromy II

Binární vyhledávací stromy II Binární vyhledávací stromy II doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 19. března 2019 Jiří Dvorský (VŠB TUO) Binární vyhledávací

Více

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

Lineární spojový seznam (úvod do dynamických datových struktur) Lineární spojový seznam (úvod do dynamických datových struktur) Jan Hnilica Počítačové modelování 11 1 Dynamické datové struktury Definice dynamické struktury jsou vytvářeny za běhu programu z dynamicky

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích

Více

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

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz (2 + 5) * (13-4) * + - 2 5 13 4 - listy stromu obsahují operandy (čísla) - vnitřní uzly obsahují operátory (znaménka)

Více

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44 Algoritmizace a programování Ak. rok 2012/2013 vbp 1. ze 44 Vladimír Beneš Petrovický K101 katedra matematiky, statistiky a informačních technologií vedoucí katedry E-mail: vbenes@bivs.cz Telefon: 251

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Šesté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 6. týden

Více

KIV/ZI Základy informatiky. Přednášející: Ing. Jana Krutišová Cvičící: Ing. Michal Nykl

KIV/ZI Základy informatiky. Přednášející: Ing. Jana Krutišová Cvičící: Ing. Michal Nykl KIV/ZI Základy informatiky Přednášející: Ing. Jana Krutišová Cvičící: Ing. Michal Nykl zimní semestr 2011 KIV/ZI Kde mě najdete Jméno: Michal Nykl e-mail: nyklm@kiv.zcu.cz web: http://home.zcu.cz/~nyklm/

Více

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

Programování v C++ 1, 1. cvičení Programování v C++ 1, 1. cvičení opakování látky ze základů programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí procvičených

Více

Prohledávání do šířky = algoritmus vlny

Prohledávání do šířky = algoritmus vlny Prohledávání do šířky = algoritmus vlny - souběžně zkoušet všechny možné varianty pokračování výpočtu, dokud nenajdeme řešení úlohy průchod stromem všech možných cest výpočtu do šířky, po vrstvách (v každé

Více

Šablony, kontejnery a iterátory

Šablony, kontejnery a iterátory 7. října 2010, Brno Připravil: David Procházka Šablony, kontejnery a iterátory Programovací jazyk C++ Šablony Strana 2 / 21 Šablona funkce/metody Šablona je obecný popis (třídy, funkce) bez toho, že by

Více

Datové struktury. alg12 1

Datové struktury. alg12 1 Datové struktury Jedna z klasických knih o programování (autor prof. Wirth) má název Algorithms + Data structures = Programs Datová struktura je množina dat (prvků, složek, datových objektů), pro kterou

Více

Název předmětu: Školní rok: Forma studia: Studijní obory: Ročník: Semestr: Typ předmětu: Rozsah a zakončení předmětu:

Název předmětu: Školní rok: Forma studia: Studijní obory: Ročník: Semestr: Typ předmětu: Rozsah a zakončení předmětu: Plán předmětu Název předmětu: Algoritmizace a programování (PAAPK) Školní rok: 2007/2008 Forma studia: Kombinovaná Studijní obory: DP, DI, PSDPI, OŽPD Ročník: I Semestr: II. (letní) Typ předmětu: povinný

Více

Ukazatele, dynamická alokace

Ukazatele, dynamická alokace Ukazatele, dynamická alokace Karel Richta a kol. katedra počítačů FEL ČVUT v Praze Přednášky byly připraveny s pomocí materiálů, které vyrobili Ladislav Vágner, Pavel Strnad, Martin Mazanec Karel Richta,

Více

ALGORITMIZACE A PROGRAMOVÁNÍ

ALGORITMIZACE A PROGRAMOVÁNÍ Metodický list č. 1 Algoritmus a jeho implementace počítačovým programem Základním cílem tohoto tematického celku je vysvětlení pojmů algoritmus a programová implementace algoritmu. Dále je cílem seznámení

Více

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

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky Vyučovací hodina 1vyučovací hodina: Opakování z minulé hodiny Nová látka Procvičení nové látky Shrnutí 5 min 20 min 15 min 5 min 2vyučovací hodiny: Opakování z minulé hodiny Nová látka Procvičení nové

Více

Předměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013

Předměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013 Předměty Algoritmizace a programování Seminář z programování Verze pro akademický rok 2012/2013 Verze pro akademický rok 2012/2013 1 Přednášky Jiřina Královcová MTI, přízemí budovy A Tel: 48 53 53 521

Více

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

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Dynamická alokace paměti Jazyky C a C++ poskytují programu možnost vyžádat si část volné operační paměti pro

Více

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

8 Třídy, objekty, metody, předávání argumentů metod 8 Třídy, objekty, metody, předávání argumentů metod Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost třídám a objektům, instančním

Více

3 Co je algoritmus? 2 3.1 Trocha historie... 2 3.2 Definice algoritmu... 3 3.3 Vlastnosti algoritmu... 3

3 Co je algoritmus? 2 3.1 Trocha historie... 2 3.2 Definice algoritmu... 3 3.3 Vlastnosti algoritmu... 3 Obsah Obsah 1 Program přednášek 1 2 Podmínky zápočtu 2 3 Co je algoritmus? 2 3.1 Trocha historie............................ 2 3.2 Definice algoritmu.......................... 3 3.3 Vlastnosti algoritmu.........................

Více

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

IUJCE 07/08 Přednáška č. 6 Správa paměti Motivace a úvod v C (skoro vždy) ručně statické proměnné o datový typ, počet znám v době překladu o zabírají paměť po celou dobu běhu programu problém velikosti definovaných proměnných jak

Více

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

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12. Obsah přednášky: Definice pojmů o datový typ, o abstraktní datový typ Datové struktury Abstraktní datové typy a jejich implementace o Fronta (Queue) o Zásobník (Stack) o Množina (Set) Algoritmizace (Y36ALG),

Více

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

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií 1 Fakulta elektrotechniky a informatiky Katedra softwarových technologií 12. října 2009 Organizace výuky Přednášky Teoretické základy dle normy jazyka C Cvičení Praktické úlohy odpřednášené látky Prostřední

Více

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

Maturitní otázky z předmětu PROGRAMOVÁNÍ Wichterlovo gymnázium, Ostrava-Poruba, příspěvková organizace Maturitní otázky z předmětu PROGRAMOVÁNÍ 1. Algoritmus a jeho vlastnosti algoritmus a jeho vlastnosti, formy zápisu algoritmu ověřování správnosti

Více

12PPOK PROJEKTOVÁNÍ POZEMNÍCH KOMUNIKACÍ

12PPOK PROJEKTOVÁNÍ POZEMNÍCH KOMUNIKACÍ Stránka 1 (celkem 6) 12PPOK PROJEKTOVÁNÍ POZEMNÍCH KOMUNIKACÍ (PREZENČNÍ FORMA STUDIA) ZIMNÍ SEMESTR 2018 2019 Informace dle ustanovení čl. 2 odst. 3 Směrnice děkana č. 2/2018 Povinná účast na jednotlivých

Více

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

Dynamicky vázané metody. Pozdní vazba, virtuální metody Dynamicky vázané metody Pozdní vazba, virtuální metody Motivace... class TBod protected: float x,y; public: int vrat_pocet_bodu() return 1; ; od třídy TBod odvodíme: class TUsecka: public TBod protected:

Více

Více o konstruktorech a destruktorech

Více o konstruktorech a destruktorech Více o konstruktorech a destruktorech Více o konstruktorech a o přiřazení... inicializovat objekt lze i pomocí jiného objektu lze provést přiřazení mezi objekty v původním C nebylo možné provést přiřazení

Více

Programování v jazyce C a C++

Programování v jazyce C a C++ Programování v jazyce C a C++ Richter 1 Petyovský 2 1. března 2015 1 Ing. Richter Miloslav, Ph.D., UAMT FEKT VUT Brno 2 Ing. Petyovský Petr, UAMT FEKT VUT Brno C++ Stručná charakteristika Nesdíĺı normu

Více

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

Jazyk C++ II. STL knihovna kontejnery část 2 Jazyk C++ II STL knihovna kontejnery část 2 AR 2013/2014 Jazyk C++ II Asociativní kontejnery Slovníky u kterých pořadí dat nemá smysl. Kontejner si sám určuje, kam který údaj uloží. Údaje mají tvar klíč/hodnota.

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

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

Programování v C++ 2, 8. cvičení Programování v C++ 2, 8. cvičení návrhový vzor iterátor 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí minule procvičené látky

Více

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

PB161 Programování v jazyce C++ Přednáška 9 PB161 Programování v jazyce C++ Přednáška 9 Právo friend Přetěžování operátorů Nikola Beneš 16. listopadu 2015 PB161 přednáška 9: friend, přetěžování operátorů 16. listopadu 2015 1 / 30 Reklama PB173 Tematicky

Více

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

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace Předmět: Vývoj aplikací Téma: Pole Vyučující: Ing. Milan Káža Třída: EK3 Hodina: 14 Číslo: V/5 Programování v jazyce

Více

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

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace Programování v jazyce C a C# část I. Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace Předmět: Algoritmizace a programování Téma: Programování Vyučující: Ing. Milan Káža

Více

Dynamické datové typy a struktury

Dynamické datové typy a struktury .. a Programovací techniky doc. Ing. Jiří Rybička Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Programovací techniky a 2 / 18 Uchovávají adresu v paměti Programovací techniky a 2 / 18 Uchovávají

Více

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

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 Stromy úvod 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 Neorientovaný strom Orientovaný strom Kořenový orientovaný

Více

Datové struktury 2: Rozptylovací tabulky

Datové struktury 2: Rozptylovací tabulky Datové struktury 2: Rozptylovací tabulky prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy

Více

Distanční opora předmětu: Programování v jazyce C Tématický blok č. 8: Dynamické datové struktury, ladění programů Autor: RNDr. Jan Lánský, Ph.D.

Distanční opora předmětu: Programování v jazyce C Tématický blok č. 8: Dynamické datové struktury, ladění programů Autor: RNDr. Jan Lánský, Ph.D. Distanční opora předmětu: Programování v jazyce C Tématický blok č. 8: Dynamické datové struktury, ladění programů Autor: RNDr. Jan Lánský, Ph.D. Obsah kapitoly 1 Dynamické datové struktury 1.1 Příklad:

Více

přetížení operátorů (o)

přetížení operátorů (o) přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - deklarace pomocí funkčního

Více

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

bfs, dfs, fronta, zásobník, prioritní fronta, halda bfs, dfs, fronta, zásobník, prioritní fronta, halda Petr Ryšavý 19. září 2017 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší

Více

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

Grafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13. Grafy 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) Grafy 104 / 309 Osnova přednášky Grafy

Více

Matematika I (2017) Literatura Opakovací kurs SŠ matematiky (4 str., 138 příkladů)+ Zákl. vzorce... Zákl. informace: Úroveň A, B,...

Matematika I (2017) Literatura Opakovací kurs SŠ matematiky (4 str., 138 příkladů)+ Zákl. vzorce... Zákl. informace: Úroveň A, B,... Matematika I (2017) 1. Základní materiály na webových stránkách ÚTM po cestě FS Ústavy ÚTM Interní stránky (a) pod odkazem Matematika I: Info organizační a studijní Týdenní plány výuky (+ popis cvičení

Více

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

Jazyk C++ II. STL knihovna kontejnery část 1 Jazyk C++ II STL knihovna kontejnery část 1 AR 2013/2014 Jazyk C++ II STL kontejnery Kontejnery jsou třídy, jejichž instance slouží k uskladňování dat. Každý druh kontejneru má své výhody a nevýhody. Kontejnery

Více

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44 Algoritmizace a programování Ak. rok 2012/2013 vbp 1. ze 44 Vladimír Beneš Petrovický K101 katedra matematiky, statistiky a informačních technologií vedoucí katedry E-mail: vbenes@bivs.cz Telefon: 251

Více

Úvod do programování - Java. Cvičení č.4

Úvod do programování - Java. Cvičení č.4 Úvod do programování - Java Cvičení č.4 1 Sekvence (posloupnost) Sekvence je tvořena posloupností jednoho nebo více příkazů, které se provádějí v pevně daném pořadí. Příkaz se začne provádět až po ukončení

Více

O datových typech a jejich kontrole

O datových typech a jejich kontrole .. O datových typech a jejich kontrole Programovací techniky doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Typová kontrola Programovací techniky O datových typech

Více

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

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové

Více

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

Reprezentace dat v informačních systémech. Jaroslav Šmarda Reprezentace dat v informačních systémech Jaroslav Šmarda Reprezentace dat v informačních systémech Reprezentace dat v počítači Datové typy Proměnná Uživatelské datové typy Datové struktury: pole, zásobník,

Více

Paralelní programování

Paralelní programování Paralelní programování přednášky Jan Outrata únor duben 2011 Jan Outrata (KI UP) Paralelní programování únor duben 2011 1 / 14 Atomické akce dále nedělitelná = neproložitelná jiným procesem izolovaná =

Více

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

PŘETĚŽOVÁNÍ OPERÁTORŮ PŘETĚŽOVÁNÍ OPERÁTORŮ Jazyk C# podobně jako jazyk C++ umožňuje přetěžovat operátory, tj. rozšířit definice některých standardních operátorů na uživatelem definované typy (třídy a struktury). Stejně jako

Více

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje Konstanty I možnosti: přednostně v paměti neexistuje žádný ; o preprocesor (deklarace) #define KONSTANTA 10 o konstantní proměnná (definice) const int KONSTANTA = 10; příklad #include v paměti

Více

Základy algoritmizace. Hašování

Základy algoritmizace. Hašování Základy algoritmizace Hašování Problematika hašování Hašování - nástroj na jednoduchý způsob "zakódování vstupních dat. Vstupní data jsou zpracována hašovací funkcí jsou jistým způsobem komprimována. Relativně

Více

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod. Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Vyhledávání, vkládání, odstraňování Vyhledání hodnoty v nesetříděném poli Vyhledání hodnoty v setříděném poli Odstranění hodnoty z pole Vkládání hodnoty do pole Verze pro akademický

Více

1. D Y N A M I C K É DAT O V É STRUKTUR Y

1. D Y N A M I C K É DAT O V É STRUKTUR Y 1. D Y N A M I C K É DAT O V É STRUKTUR Y Autor: Petr Mik Abychom se mohli pustit do dynamických datových struktur, musíme se nejdřív podívat na datový typ ukazatel. 1. D AT O V Ý TYP U K A Z AT E L Datové

Více

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ý

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ý 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ý typem proměnné - ukazatel je tedy adresa společně s

Více

Informační a komunikační technologie

Informační a komunikační technologie Dodatek č. Školního vzdělávacího programu Obchodní akademie Lysá nad Labem, obor 63-4-M/02 Obchodní akademie, platného od. 9. 202 - platnost dodatku je od. 9. 206 Informační a komunikační technologie je

Více

Struktura programu v době běhu

Struktura programu v době běhu Struktura programu v době běhu Miroslav Beneš Dušan Kolář Struktura programu v době běhu Vztah mezi zdrojovým programem a činností přeloženého programu reprezentace dat správa paměti aktivace podprogramů

Více

Vstupní požadavky, doporučení a metodické pokyny

Vstupní požadavky, doporučení a metodické pokyny Název modulu: Základy PHP Označení: C9 Stručná charakteristika modulu Modul je orientován na tvorbu dynamických stánek aktualizovaných podle kontextu volání. Jazyk PHP umožňuje velmi jednoduchým způsobem

Více

SYLABUS BAKALÁŘSKÁ PRÁCE A PRAXE

SYLABUS BAKALÁŘSKÁ PRÁCE A PRAXE SYLABUS MODULU BAKALÁŘSKÁ PRÁCE A PRAXE František Prášek Ostrava 2011 : Sylabus modulu Bakalářská práce a praxe Autoři: Ing. František Prášek Vydání: první, 2011 Počet stran: 15 Tisk: Vysoká škola podnikání,

Více

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

Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti. Seznamy a stromy Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti. Klíčové pojmy: Seznam, spojový seznam, lineární seznam, strom, list, uzel. Úvod

Více

Abstraktní datové typy: zásobník

Abstraktní datové typy: zásobník Abstraktní datové typy: zásobník doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Abstraktní datové typy omezené rozhraní

Více

HARMONOGRAM AKADEMICKÉHO ROKU 2018/2019

HARMONOGRAM AKADEMICKÉHO ROKU 2018/2019 HARMONOGRAM AKADEMICKÉHO ROKU 2018/2019 HARMONOGRAM AKADEMICKÉHO ROKU 2018/2019... 3 HAMORNOGRAM ZÁPISŮ KE STUDIU... 3 Bakalářské studium prezenční i kombinovaná forma... 3 Navazující magisterské studium

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Osmé počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 20.11.2017,

Více