Zásobník (LIFO) Opakem zásobníku LIFO je fronta FIFO (First In, First Out první dovnitř, první ven)

Podobné dokumenty
Abstraktní datové typy FRONTA

Lineární datové struktury

Základní datové struktury

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

Lineární datové struktury

Kolekce, cyklus foreach

Homer. prvky. délka. přední 0 zadní 4. Použití fronty BUS STOP. 3 Lisa. 2 Bart. 4 Maggie. 1 Marge. Grafické znázornění předchozí animace:

Konstruktory a destruktory

Maturitní téma: Programovací jazyk JAVA

Datové typy a struktury

Datové struktury. alg12 1

Algoritmizace prostorových úloh

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

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

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

FRONTA. Podobně jako u zásobníku lze prvek z fronty vyjmout pouze za takové podmínky, že je na řadě. Avšak jeho hodnotu můžeme přečíst kdykoliv.

Radomíra Duží L Datový typ množina

Algoritmizace prostorových úloh

TÉMATICKÝ OKRUH TZD, DIS a TIS

Dynamické datové struktury I.

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

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu

ABSTRAKTNÍ DATOVÉ TYPY (ADT)

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

Implementace LL(1) překladů

Anotace. Spojové seznamy, haldy. AVL-stromy, A-B stromy. Martin Pergel,

součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

Abstraktní datové typy: zásobník

ADT/ADS = abstraktní datové typy / struktury

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

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

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

Přidělování paměti II Mgr. Josef Horálek

Abstraktní datové typy

ADT prioritní fronta. Haldy. Další operace nad haldou. Binární halda. Binomické stromy. Časová složitost jednotlivých operací.

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

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

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr

O datových typech a jejich kontrole

1. Implementace funkce počet vrcholů. Předmět: Algoritmizace praktické aplikace (3ALGA)

Paměti a jejich organizace

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

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

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

Zadání k 2. programovacímu testu

Datový typ prioritní fronta Semestrální práce z předmětu 36PT

bfs, dfs, fronta, zásobník

Dynamické datové struktury IV.

Implementace slovníku bitovým vektorem

PES lib (C + PASCAL) KNIHOVNY KOMUNIKAÈNÍCH FUNKCÍ 03/ PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/ stran 1

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620

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

ISU Cvičení 7. Marta Čudová

4EK201 Matematické modelování. 8. Modely hromadné obsluhy

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

Pokročilá algoritmizace amortizovaná složitost, Fibonacciho halda, počítačová aritmetika

Návrh designu: Radek Mařík

ABSTRAKTNÍ DATOVÉ TYPY

ROZHODOVACÍ PROCEDURY A VERIFIKACE PAVEL SURYNEK, KTIML

Šablony, kontejnery a iterátory

prohled av an ı graf u Karel Hor ak, Petr Ryˇsav y 16. bˇrezna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

V případě jazyka Java bychom abstraktní datový typ Time reprezentující čas mohli definovat pomocí třídy takto:

Programování v Pythonu

Anotace. Dámy na šachovnici dominance a nezávislost. Aritmetické výrazy, notace a převody mezi nimi, nejdelší rostoucí podposloupnost.

Spuštění instalace. nastavení boot z cd v BIOSu vložení CD s instal. médiem spuštění PC. nastavení parametrů instalace (F2 čěština)

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

Anotace. Pointery. Martin Pergel,

Cvičení 9 - Monitory. monitor m; var proměnné... procedure p; begin... end; begin inicializace; end;

I. Dalšívnitřní paměti

Přednáška. Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C

Časová a prostorová složitost algoritmů

solutions BITO PROflow active Inteligentní skladování Světová novinka - inteligentní válec BITO

IS Restaurace. Semestrální práce. Tomáš Rumíšek V Brně dne Peter Ševčík

TGH07 - Chytré stromové datové struktury

4EK311 Operační výzkum. 8. Modely hromadné obsluhy

Implementace binárního stromu směrníky

Předmět: Algoritmizace praktické aplikace

5 Rekurze a zásobník. Rekurzivní volání metody

Dynamické datové typy a struktury

Vypracoval: Antonín Krumnikl Mob.: Tel.:

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

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

Semestrální práce 2 znakový strom

Kapitola 7: Návrh relačních databází. Nástrahy relačního návrhu. Příklad. Rozklad (dekompozice)

Semestrální práce z předmětu. Jan Bařtipán / A03043 bartipan@studentes.zcu.cz

Úvod do simulace - 1

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

Služba ve Windows. Služba (service) je program

Náznak ukázky syntaxe a sémantiky pro projekt. 1 Syntaktické prvky. Poslední aktualizace: 8.

6.4 Základní účtování zboží

Pole jinak ArrayList ve VBA

BI-EP1 Efektivní programování 1

Knihovna DataBoxLib TXV první vydání prosinec 2010 změny vyhrazeny

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.

2 PALET P O ALET VÉ O REGÁLY REGÁL

Šablony, kontejnery a iterátory

Dealer Extranet 3. Správa objednávek

Transkript:

Zásobník (LIFO) Je dynamická datová struktura s těmito dovolenými operacemi: CREATE(S) - vytvoří prázdný zásobník S, TOP(S) - vrátí prvek na vrchu zásobníku S, POP(S) - vyhodí prvek na vrchu zásobníku S, PUSH(x, S) - vloží prvek x na vrch zásobníku S, EMPTY(S) - vrátí TRUE, je-li zásobník prázdný, jinak vrátí FALSE Zásobník (anglicky STACK) se také označuje jako struktura LIFO (Last In, First Out poslední dovnitř, první ven) Je to posloupnost prvků nějakého typu, přičemž přístup k této posloupnosti je pouze na jednom jejím konci, který se nazývá vrchol (anglicky TOP) zásobníku Obsah zásobníku lze měnit jen na tomto jednom konci pomocí dvou základních operací: Přidání prvku na vrchol zásobníku (PUSH) Odebrání prvku z vrcholu zásobníku (POP) Opakem zásobníku LIFO je fronta FIFO (First In, First Out první dovnitř, první ven) Zásobník lze přirovnat k zásobníku nábojů v pistoli nebo samopalu Náboje jsou přesouvány do nábojové komory v opačném pořadí, než byly do zásobníku vloženy V jednom okamžiku máme k dispozici pouze horní náboj, nebo je zásobník prázdný Ke spodním nábojům se lze dostat jen vyjmutím předchozích nábojů Ukazatel na aktuální prvek v zásobníku (posledně vložený) se nazývá vrchol zásobníku (anglicky STACK POINTER) Opakem je dno zásobníku Operace vložení do zásobníku se tradičně nazývá PUSH a vyjmuti se nazývá POP Jako třetí se u zásobníku implementuje dotaz EMPTY, který indikuje prázdnost zásobníku Navíc se někdy přidává dotaz TOP, který vrací prvek na vrcholu zásobníku, aniž by ho vyjmul (nedestruktivní varianta POP) Pokud provedeme operaci POP na prázdném zásobníku, nastává chyba tzv podtečení (anglicky UNDERFLOW) Zásobník má teoreticky neomezenou kapacitu Pokud ji omezíme např Zásobník (LIFO) Vypracoval Libor Lenhart 1

velikostí přidělené paměti, a nelze již přidat další prvek, nastává opět chyba tzv přetečení (anglicky OVERFLOW) Příklady, kde všude v běžném životě se lze setkat se zásobníkem LIFO: U nás doma: Už před rokem jsme se přestěhovali do většího bytu, a přesto pořád máme spoustu věcí v krabicích A v nich hlavně noty, těch máme spoustu Takže systém LIFO zde funguje dokonale Když potřebuje žena najít nějaké noty, musí nejprve spoustu vyndat, až se dostane k těm požadovaným Uvažoval jsem, že bychom mohli odstřihnout dno a udělat jedním šmahem ze zásobníku LIFO frontu FIFO, ale nikdo se mnou nesouhlasil Tak už mi zbývá jen to Delphi, tam to mohu zkoušet jak je libo V restauraci: V restauračních zařízeních můžeme na systém LIFO narazit kdykoliv Stačí, když nám číšník začne nosit jídlo v opačném pořadí Znáte to sami Nejdříve vám přinesou kompot, pak hlavní jídlo a teprve potom polévku No a vy to samozřejmě sníte v opačném pořadí, tak jak se to běžně dělá, tedy nejprve polévka, pak hlavní jídlo a nakonec kompot No není to princip zásobníku? Zažívací trakt: pokračování z restaurace Zde to nebudu moc rozvádět, však to znáte sami Pokud to jde nazpět vrchem, jedná se o LIFO, no a pokud to jde spodem, tak už je to FIFO Zásobník (LIFO) Vypracoval Libor Lenhart 2

Funkce VoIP telefonní ústředny: Stahování hovoru z jiných telefonů - uživatel si může převzít hovor z jiného pobočkového VoIP telefonu V případě více příchozích hovorů platí pravidlo LIFO - poslední příchozí hovor bude převzat jako první a první příchozí hovor jako poslední Regály ve skladu: Tohle jsem se dočetl na netu, tak dělám chytrého Existují dva druhy regálů: 1 Push-back regály Mají pouze jednu obslužnou rovinu, zakládání i odebírání palet je pouze z jedné strany Při plnění kanálů paletami zatlačuje nebo brzdí manipulační vozík i palety, které jsou již založené Po odebrání poslední palety sjíždí ostatní do místa odběru Skladování palet v push-back regálech je dle principu LIFO 2 Spádové regály - Jejich použití je všude tam, kde je vyžadováno skladování dle principu FIFO Mají dvě obslužné roviny, z jedné strany se palety zakládají do kanálů, na straně druhé se pak z kanálu odebírají Konstrukce dráhy je navíc opatřena koncovým oddělováním ostatních palet v kanálu od poslední, pro její bezpečné odebírání Ve skladovém účetnictví: Last In,, First Out = poslední do skladu,, první ze skladu Poslední cena použitá při ocenění přírůstku zásob se použije jako první cena při ocenění úbytku zásob Při inflaci, tj vyššímu růstu cen vede k vykazování nižší hrubé marže tedy nižšímu výsledku hospodaření ve výsledovce na úkor přesnějšího ocenění zůstatku zásob v rozvaze (stav je podhodnocen) Zásobník (LIFO) Vypracoval Libor Lenhart 3

Zmrzlina (hackerská legenda, převzatá z internetu) Za starých časů jste si mohli dát v cukrárně zmrzlinu třeba jahodovou, oříškovou, pistáciovou a vanilkovou, dostali jste do kornoutu čtyři kopečky zmrzliny a mohli jste postupně lízat jahodovou, oříškovou, pistáciovou a vanilkovou zmrzlinu Jenže pak si nějací chytráci uvědomili, že kornout není hardwarově fronta, ale zásobník, takže fronta je patrně emulována na úrovni prodavačky, která tím pádem musí mít vyrovnávací paměť, kde si uloží všechny objednané zmrzliny, aby je mohla naskládat do kornoutu v opačném pořadí Rychle zjistili, že prodavačky nejsou chráněny proti buffer overflow, a brzy vymysleli první exploity Stačilo jim pak přijít do cukrárny, objednat si například 65 libovolných zmrzlin a pak ještě oříškovou, citronovou, dvě kávové a znova oříškovou a prodavačka vyplivla rootshell a mohli se nacpat zmrzliny, kolik chtěli, a někteří pak ještě sežrali nějaké ty indiánky, rolády, trubičky či krekry (podle nich se také těmto chytrákům začalo říkat krekři, anglicky crackers) Bylo jasné, že zvětšením paměti prodavaček se nic nevyřeší (navíc byly tehdy paměti do prodavaček neuvěřitelné drahé) a i zákaz nošení jmenovek se ukázal jako nepříliš účinné řešení krekři poznali prodavačku podle obličeje, a když ne, tak prostě vyzkoušeli víc kombinací zmrzlin Řada cukrářů tehdy investovala do inteligentních prodavaček, které jakékoli objednávky nad deset kopečků ignorovaly a hlásily je šéfovi, ale řada zákazníků si stěžovala, že si už nemůžou normálně vzít patnáct zmrzlin do termosky a odnést si je domů, ale musí to pořád řešit s šéfem nebo si je objednávat po částech Nakonec to cukráři vzdali a sebrali prodavačkám veškerou paměť a změnili algoritmus ukládání zmrzliny do kornoutu tak, že se začala ukládat ve stejném pořadí, jak přicházejí požadavky Od té doby jsou zmrzliny LIFO a když si objednáte jogurtovou a karamelovou, dostanete místo toho karamelovou a jogurtovou Taky můžete jak dlouho chcete otravovat prodavačky, jestli budou zase někdy mívat kávovou zmrzlinu, ale ony to vždycky okamžitě zapomenou n 4 3 2 1 VRCHOL ZÁSOBNÍKU Pohyblivý DNO ZÁSOBNÍKU Pevně Zásobník (LIFO) Vypracoval Libor Lenhart 4

Implementace zásobníku pomocí lineárního seznamu: Type Pzas = ^zas; zas = record cislo: Integer; dalsi: Pzas var vrch: Pzas; function EMPTY: Boolean; result:=vrch=nil function TOP: Pzas; result:=vrch //EMPTY - vrátí TRUE, je-li zásobník prázdný, jinak vrátí FALSE //TOP - vrátí prvek na vrchu zásobníku Pzas procedure TForm1Button1Click(Sender: TObject); vrch:=nil; procedure TForm1Button2Click(Sender: TObject); var q: Pzas; new(q); if EMPTY then q^cislo:=1 else q^cislo:=vrch^cislo+1; q^dalsi:=vrch; vrch:=q; procedure TForm1Button4Click(Sender: TObject); var q: Pzas; if not EMPTY then q:=vrch; vrch:=vrch^dalsi; dispose(q) //prázdný zásobník /PUSH - vloží prvek q na vrch zásobníku Pzas //POP - vyhodí prvek q z vrchu zásobníku Pzas Zásobník (LIFO) Vypracoval Libor Lenhart 5