3.2.3. Reprezentace zásobníku pomocí vázaného seznamu

Jinou možností jak dosáhnout automatického přizpůsobování velikosti zásobníku je jeho reprezentace vázaným seznamem položek nesoucích jednotlivé hodnoty. Vázaný seznam je tvořen položkami obsahujícími kromě samotné datové hodnoty také odkaz na následující prvek seznamu. Každá položka bude mít následující definici:

class StackElem { 
  Object    data;     // hodnota 
  StackElem last;     // reference na předcházející prvek 
	 
  StackElem(Object data, StackElem last) { 
    this.data = data;  
    this.last = last; 
  } 
}

Třída LinkedStack reprezentující zásobník pak obsahuje pouze referenci na naposledy vložený prvek na zásobníku - viz Obr. 3.4. V metodách pop() a top() opět kontrolujeme, zda nepracujeme s prázdným zásobníkem.

Obrázek 3.4. Zásobník implementovaný jako vázaný seznam

public class LinkedStack implements Stack 
{ 
  public void push(Object obj) { 
    _top = new StackElem(obj, _top); 
  } 
 
  public Object pop() { 
    assert _top != null : "Zasobnik je prazdny"; 
    Object topObj = _top.data; 
    _top = _top.last; 
    return topObj; 
  } 
 
  public Object top() { 
    assert _top != null : "Zasobnik je prazdny"; 
    return _top.data;	 
  } 
 
  public boolean empty() { 
    return _top == null; 
  }
 
  protected StackElem _top = null; 
}