// classe Coda implementata con Lista semplice di oggetti

public class LLCodaObject {
  private ListaComparable elem;
    
  //costruttori
  public LLCodaObject() {
    elem = new ListaComparable();
  }
    
  //metodi canonici
  public boolean IsEmpty() {return elem.IsEmpty();}

  public void Clear() {
    try {
      while(true)
        elem.DeleteHead();
    } catch (EmptyListException e) {}
  }
  
  public void EnQueque(Object val) {
    elem.InsertTail(val);
  }
  
  public Object DeQueque() {
    if (IsEmpty())
      throw new CodaEmptyException();
    return elem.DeleteHead();
  }
  
  public Object HeadElem() {
    if (IsEmpty())
      throw new CodaEmptyException();
    elem.rewind();
    return elem.getNextElem();
  }
}

//Eccezione personalizzata per la classe Coda.
class CodaEmptyException extends RuntimeException {
  public CodaEmptyException() {
    super("Coda Vuota.");
  }
  public CodaEmptyException(String msg) {
    super(msg);
  }
  
}