/* classe Coda implementata con Lista semplice di valori interi
Si inseriscono i nodi DALLA CODA della lista e si prelevano DALLA TESTA della lista.
Il meccanismo è il seguente:
EnQueque() -> inserisce un nodo in CODA alla lista
DeQueque() -> elimina un nodo dalla TESTA della lista
Clear() -> elimina tutti i nodi (usa eccezione)
HeadElem() -> riavvolge e preleva il valore dal primo nodo della lista
*/
public class LLCoda {
private Lista elem;
//costruttori
public LLCoda() {
elem = new Lista();
}
//metodi canonici
public boolean IsEmpty() {return elem.IsEmpty();}
public void Clear() {
try {
while(true)
elem.DeleteHead();
} catch (EmptyListException e) {}
}
public void EnQueque(int val) {
elem.InsertTail(val);
}
public int DeQueque() {
if (IsEmpty())
throw new CodaEmptyException();
return elem.DeleteHead();
}
public int 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);
}
}