Zásobník
Zásovník je datová
struktura, která uchovává prvky v opačném pořadí, než v jakém
byly do zásobníku vloženy (srovnej s frontou). První prvek
v pořadí je tedy prvek, který byl do zásobníku vložen jako poslední.
Toto chování se označuje anglickým akronymem LIFO (last in first out) –
kdo přijde poslední, je obsloužen jako první.
Zásobník se v řadičích často objevuje jako hardwarový prvek podporující skoky do
podprogramů a zpětné návraty (přístup „call-and-return“).
Zásobníkovou architekturu využívají i některé interpretované programovací jazyky.
Implementace
Zásobník pomocí spojového seznamu (Java)
kód v jazyce Java - Zobrazit
-
package demo;
-
-
/**
-
* Dynamický zásobník
realizovaný pomocí seznamu.
-
* @author Vojtěch
Hordějčuk
-
*/
-
public class
LinkedStack<E>
-
{
-
/**
-
* hlavička
zásobníku
-
*/
-
private Node<E>
top;
-
-
/**
-
* Vytvoří novou
frontu.
-
*/
-
public LinkedStack()
-
{
-
top = null;
-
}
-
-
/**
-
* Ověří, zda je
zásobník prázdný.
-
* @return TRUE právě když
je zásobník prázdný
-
*/
-
public boolean isEmpty()
-
{
-
return top == null;
-
}
-
-
/**
-
* Vloží prvek na vrchol
zásobníku.
-
* @param item vkládaný
prvek
-
*/
-
public void push(E item)
-
{
-
Node<E> newTop = new Node<E>(item);
-
newTop.append(top);
-
top = newTop;
-
}
-
-
/**
-
* Odebere a vrátí vrchol
zásobníku.
-
* @return bývalý vrchol
zásobníků
-
*/
-
public E pop()
-
{
-
if (isEmpty())
-
{
-
throw new RuntimeException();
-
}
-
-
E headValue = top.getValue();
-
top = top.getNext();
-
return headValue;
-
}
-
-
/**
-
* Prvek spojového
seznamu.
-
* @param <E> třída
hodnoty
-
*/
-
private static class Node<E>
-
{
-
private E value;
-
private Node<E>
next;
-
-
protected Node(E value0)
-
{
-
value = value0;
-
next = null;
-
}
-
-
protected E
getValue()
-
{
-
return
value;
-
}
-
-
protected Node<E>
getNext()
-
{
-
return
next;
-
}
-
-
protected void append(Node<E>
next0)
-
{
-
next = next0;
-
}
-
}
-
}
Reference