<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sk">
	<id>http://www.kiwiki.info/index.php?action=history&amp;feed=atom&amp;title=Z%C3%A1sobn%C3%ADk</id>
	<title>Zásobník - História úprav</title>
	<link rel="self" type="application/atom+xml" href="http://www.kiwiki.info/index.php?action=history&amp;feed=atom&amp;title=Z%C3%A1sobn%C3%ADk"/>
	<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Z%C3%A1sobn%C3%ADk&amp;action=history"/>
	<updated>2026-05-03T16:45:59Z</updated>
	<subtitle>História úprav pre túto stránku na wiki</subtitle>
	<generator>MediaWiki 1.34.0</generator>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Z%C3%A1sobn%C3%ADk&amp;diff=6638&amp;oldid=prev</id>
		<title>Juraj na 20:10, 16. august 2010</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Z%C3%A1sobn%C3%ADk&amp;diff=6638&amp;oldid=prev"/>
		<updated>2010-08-16T20:10:44Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;sk&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Staršia verzia&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Verzia zo dňa a času 20:10, 16. august 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Riadok 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Riadok 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategória:Študijné materiály]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategória:Študijné materiály]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategória:&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Programovanie&lt;/del&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategória:&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Algoritmy a programovanie&lt;/ins&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategória:Informatika]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategória:Informatika]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Draft}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Draft}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Juraj</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Z%C3%A1sobn%C3%ADk&amp;diff=6375&amp;oldid=prev</id>
		<title>Juraj: Vytvorená stránka „Kategória:Študijné materiály Kategória:Programovanie Kategória:Informatika {{Draft}} {{Skripta programovanie}} Dátová štruktúra Zásobník, označovan…“</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Z%C3%A1sobn%C3%ADk&amp;diff=6375&amp;oldid=prev"/>
		<updated>2010-07-30T14:37:14Z</updated>

		<summary type="html">&lt;p&gt;Vytvorená stránka „&lt;a href=&quot;/index.php/Kateg%C3%B3ria:%C5%A0tudijn%C3%A9_materi%C3%A1ly&quot; title=&quot;Kategória:Študijné materiály&quot;&gt;Kategória:Študijné materiály&lt;/a&gt; &lt;a href=&quot;/index.php/Kateg%C3%B3ria:Programovanie&quot; title=&quot;Kategória:Programovanie&quot;&gt;Kategória:Programovanie&lt;/a&gt; &lt;a href=&quot;/index.php/Kateg%C3%B3ria:Informatika&quot; title=&quot;Kategória:Informatika&quot;&gt;Kategória:Informatika&lt;/a&gt; {{Draft}} {{Skripta programovanie}} Dátová štruktúra Zásobník, označovan…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Kategória:Študijné materiály]]&lt;br /&gt;
[[Kategória:Programovanie]]&lt;br /&gt;
[[Kategória:Informatika]]&lt;br /&gt;
{{Draft}}&lt;br /&gt;
{{Skripta programovanie}}&lt;br /&gt;
Dátová štruktúra Zásobník, označované aj ako pamäť LIFO. LIFO je skratka z anglického ''Last In First Out''.&lt;br /&gt;
=Pamäť LIFO=&lt;br /&gt;
[[Súbor:Data stack.svg|thumb|right|Princíp zásobníka]]&lt;br /&gt;
Zásobník je v všeobecná dátová štruktúra (tzv. abstraktný dátový typ) používaná pre dočasné ukladanie dát. Používa sa aj anglické označenie ''stack''. Pre zásobník je charakteristický spôsob manipulácie s dátami - dáta, ktoré sú do pamäti vložené ako posledné, budú čítané ako prvé.&lt;br /&gt;
&lt;br /&gt;
Pre manipuláciu s uloženými dátovými položkami sa sa používa tzv. ukazateľ zásobníka, ktorý udáva relatívnu adresu poslednej pridanej položky, tzv. vrchol zásobníku.&lt;br /&gt;
&lt;br /&gt;
Obsahom zásobníka môžu byť akékoľvek dátové štruktúry. Môže byť realizovaný ako programovými prostriedkami, tak aj elektronickými obvodmi.&lt;br /&gt;
&lt;br /&gt;
=Implementácia zásobníka=&lt;br /&gt;
Pri práci so zásobníkom (LIFO) platia nasledujúce tvrdenia:&lt;br /&gt;
*dátový typ zásobník (LIFO) model pamäte,&lt;br /&gt;
*kapacita pamäte je obmedzená; vždy je definovaná veľkosť pamäte,&lt;br /&gt;
*pri vkladaní údajov do zásobníka neurčujeme adresu, kde sa dáta zapíšu,&lt;br /&gt;
**vkladané dáta sa zapíšu na vrchol zásobníka (ak nie je zásobník plný),&lt;br /&gt;
**vrchol zásobníka obsahuje hodnotu (resp. adresu) vrcholu zásobníka, teda miesta, ktoré je voľné,&lt;br /&gt;
*pri čítaní údajov zo zásobníka sa taktiež nedefinuje adresa z ktorej sa budú dáta čítať,&lt;br /&gt;
**pri čítaní sa vždy prečíta údaj, ktorý bol vložený posledný,&lt;br /&gt;
*dátové položky zásobníka môžu byť ľubovoľné dátové typy (štruktúra, pole, smerník, ...)&lt;br /&gt;
==Princíp práce so zásobníkom==&lt;br /&gt;
Pre prácu zo zásobníkom definujme nasledujúce operácie:&lt;br /&gt;
*pridanie jedného prvku do zásobníka (push)&lt;br /&gt;
*odobratie jedného prvku zo zásobníka (pop)&lt;br /&gt;
*prečítanie hodnoty z vrcholu zásobníka (top)&lt;br /&gt;
*test na veľkosť zásobníka (is_empty)&lt;br /&gt;
Pridávanie nových údajov do zásobníka je znázornené na nasledujúcom obrázku:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:pridavanie 1 lifo.png|framed|center|Úspešné pridávanie údajov do zásobníka]]&lt;br /&gt;
&lt;br /&gt;
Pri pokuse vložiť do plného zásobníka ďalší údaj, skončí táto operácia neúspechom.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:pridavanie 2 lifo.png|framed|center|Neúspešné pridávanie údajov do zásobníka]]&lt;br /&gt;
&lt;br /&gt;
Pri výbere údajov zo zásobníka je operácia úspešná len vtedy, ak nie je zásobník prázdny.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:vyber lifo.png|framed|center|Výber údajov zo zásobníka]]&lt;br /&gt;
&lt;br /&gt;
==Návrh dátovej štruktúry pre zásobník==&lt;br /&gt;
Dátová štruktúra LIFO pozostáva z 2 častí:&lt;br /&gt;
*miesto, kde budú uložené samotné dáta, &lt;br /&gt;
**pre uloženie samotných dát môžeme použiť dátovú štruktúru pole s definovanou veľkosťou&lt;br /&gt;
*indikátor zaplnenia zásobníka, resp. vrchol zásobníka.&lt;br /&gt;
**keďže dáta sú uložené v jednorozmernom poli, tak ukazateľ (pozor, teraz nemyslím smerník, resp. pointer) na vrchol môže byť celočíselná premenná, ktorá by udávala index prvku poľa.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:zasobnik lifo.png|thumb|right|Zásobník LIFO]]&lt;br /&gt;
&lt;br /&gt;
V nasledujúcom texte budeme pracovať so zásobníkom, ktorý bude ukladať celočíselné hodnoty. &lt;br /&gt;
&lt;br /&gt;
Návrh dátovej štruktúry LIFO:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define MAX_PAMAT 20&lt;br /&gt;
struct LIFO{&lt;br /&gt;
    int pamat[MAX_PAMAT];&lt;br /&gt;
    int vrchol;&lt;br /&gt;
    };&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Treba povedať, že premenná ''vrchol'' štruktúry ''LIFO'' má hodnotu prvého voľného prvku v pamäti LIFO.&lt;br /&gt;
==Implementácia zásobníka v jazyku C==&lt;br /&gt;
===Pridávanie do zásobníka===&lt;br /&gt;
Funkcia ''push'' bude pridávať položky do zásobníka. Funkcia bude mať jeden parameter - údaj, ktorý chceme do zásobníka vložiť.&lt;br /&gt;
&lt;br /&gt;
Počas tejto operácie môžu nastať nasledujúce prípady:&lt;br /&gt;
* vloženie bolo úspešné (stav OK)&lt;br /&gt;
* vloženie bolo neúspešné, zásobník bol pred vložením plný (stav FULL)&lt;br /&gt;
Pre reprezentáciu týchto stavom navrhneme špeciálny vymenovaný (''enumerated'') dátový typ ''stav_fronty'':&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
   enum stav_fronty &lt;br /&gt;
   { &lt;br /&gt;
     OK=-1, &lt;br /&gt;
     FULL=-2, &lt;br /&gt;
     EMPTY=-3&lt;br /&gt;
   };&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zdrojový kód v jazyku C:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line &amp;gt;&lt;br /&gt;
stav_fronty push(LIFO &amp;amp;zasobnik,int x)&lt;br /&gt;
{&lt;br /&gt;
   if(zasobnik.vrchol&amp;lt;MAX_PAMAT)&lt;br /&gt;
    zasobnik.pamat[zasobnik.vrchol++]=x;&lt;br /&gt;
   else&lt;br /&gt;
    return FULL;&lt;br /&gt;
   return OK;   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vysvetlenie:&lt;br /&gt;
*funkcia ''push'' pridá do zásobníka (zasobnik) hodnotu (x)&lt;br /&gt;
*Na riadku 4 je samotné vloženie údaja do zásobníka. Nový údaj (x) sa vloží do časti ''pamat'' štruktúry LIFO s indexom ''vrchol''. Následne treba hodnotu vrcholu zväčšiť o 1. &lt;br /&gt;
*V prípade úspechu (zásobník ešte nie je plný) vráti OK, v opačnom prípade vráti hodnotu FULL&lt;br /&gt;
&lt;br /&gt;
===Výber zo zásobníka===&lt;br /&gt;
Pre výber údajov zo zásobníka slúži funkcia ''pop''. Funkcia pop zabezpečí výber najvrchnejšej hodnoty zo zásobníka.&lt;br /&gt;
Počas tejto operácie môžu nastať nasledujúce prípady:&lt;br /&gt;
* výber bol úspešný (stav OK),&lt;br /&gt;
* výber bol úspešný, pretože sme sa pokúsili vybrať údaj z prázdneho zásobníka (stav EMPTY).&lt;br /&gt;
&lt;br /&gt;
Zdrojový kód v jazyku C:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line line&amp;gt;&lt;br /&gt;
int pop(LIFO &amp;amp;zasobnik)&lt;br /&gt;
{&lt;br /&gt;
   if(zasobnik.vrchol&amp;gt;0)&lt;br /&gt;
    return zasobnik.pamat[ --zasobnik.vrchol];&lt;br /&gt;
   else&lt;br /&gt;
    return EMPTY;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vysvetlenie:&lt;br /&gt;
*funkcia ''pop'' odoberie zo zásobníka (zasobnik) hodnotu na vrchole zásobníka a túto hodnotu vvráti&lt;br /&gt;
*Na riadku 4 je samotný výber údaja zo zásobníka.  Pri výbere sa skôr ako sa zavolá príkaz return musí znížiť hodnota vrcholu zásobníka o 1. To ale len v tom prípade, ak nie je zásovník prázdny.&lt;br /&gt;
*V prípade úspechu (zásobník ešte nie je prázdny) vráti prečítanú hodnotu, v opačnom prípade vráti hodnotu EMPTY&lt;br /&gt;
&lt;br /&gt;
'''prečítanie hodnoty z vrcholu zásobníka (top)''' &lt;br /&gt;
Funkcia ''top'' sa od funkcie ''pop'' líši len na riadku 4. V prípade funkcie ''top'', nebudeme znižovať hodnotu vrcholu zásobníka.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line line&amp;gt;&lt;br /&gt;
int top(LIFO &amp;amp;zasobnik)&lt;br /&gt;
{&lt;br /&gt;
   if(zasobnik.vrchol&amp;gt;0)&lt;br /&gt;
    return zasobnik.pamat[zasobnik.vrchol];&lt;br /&gt;
   else&lt;br /&gt;
    return EMPTY;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Test na veľkosť zásobníka===&lt;br /&gt;
Počas práce so zásobníkom potrebuje zistiť veľkosť zásobníka, resp. či je zásobník prázdny. Vytvorme nasledujúce funkcie:&lt;br /&gt;
* is_empty : vráti hodnotu 1, ak je zásobník prázdy&lt;br /&gt;
* volne_miesta : vráti počet voľných miest v zásovníku&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int is_empty(LIFO &amp;amp;zasobnik)&lt;br /&gt;
{&lt;br /&gt;
  return zasobnik.vrchol==0 ? 1:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int volne_miesta(LIFO &amp;amp;zasobnik)&lt;br /&gt;
{&lt;br /&gt;
  return MAX_PAMAT - zasobnik.vrchol;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Praktické využitie zásobníka=&lt;br /&gt;
==Stack pointer==&lt;br /&gt;
Najznámejšou aplikáciou zásobníka je vnútorný zásobník realizovaný procesorom, do ktorého sú ukladané návratové adresy a príznaky stavu procesora pri prerušeniach a skokoch do podprogramov. Pri návrate z podprogramu je z vrcholu zásobníka vybratá návratová adresa a spracovanie pokračuje od prerušeného miesta. Tento zásobník môže byť čisto v procesore, alebo sa fyzicky nachádza v pamäti a procesor obsahuje iba podporu jeho používania. Vo väčšine prípadov (vrátane procesorov architektúry i386) je možné na zásobník v pamäti s podporou procesora ukladať ľubovoľné informácie, čo sa využíva predovšetkým k ukladaniu parametrov funkcií a ich lokálnych premenných.&lt;br /&gt;
==Intepreter postfixových aritmetických výrazov==&lt;br /&gt;
Pomocou abstraktného dátového typu (ADT) zásobníka sa dajú veľmi dobre vyhodnocovať práve postfixové aritmetické výrazy. Každý operátor si z vrcholu zásobníka načíta svoje dva operandy a po vykonaní operácie na nich vráti jej výsledok namiesto týchto dvoch operandov na vrchol zásobníka (využitie princípu dátovej štruktúry typu LIFO). Nasledujúci obrázok demonštruje tento jednoduchý princíp na vyhodnocovaní vyššie uvedeného postfixového aritmetického výrazu. Pozri - [[Štruktúry (riešené príklady)#Zásobník - pamäť typu LIFO|Zásobník - pamäť typu LIFO]]&lt;br /&gt;
=Použitá literatúra=&lt;br /&gt;
* http://cs.wikipedia.org/wiki/Z%C3%A1sobn%C3%ADk_%28datov%C3%A1_struktura%29&lt;br /&gt;
* http://cs.wikipedia.org/wiki/Fronta_a_z%C3%A1sobn%C3%ADk#Z.C3.A1sobn.C3.ADk_.28LIFO.29&lt;br /&gt;
* http://en.wikipedia.org/wiki/Stack_%28data_structure%29&lt;/div&gt;</summary>
		<author><name>Juraj</name></author>
		
	</entry>
</feed>