![]() ![]() |
|
Una coda (queue)
è un sequenza di zero o più elementi
in cui è possibile aggiungere elementi soltanto ad un estremo della sequenza, detto fondo (back), ed è possibile toglierli soltanto dall'altro estremo, detto testa (front). Politica di accesso: [primo elemento inserito, primo elemento rimosso] Esempi: una coda di persone alla cassa di un cinema,
una lista di ordini da evadere, ...
|
![]() ![]() |
|
![]() Rappresentiamo una coda come una sequenza di caselle contenenti
i suoi elementi, nell'ordine in cui sono stati inseriti. La casella più
a sinistra è la testa (front), quella più a
destra è il fondo (back).
|
![]() ![]() |
|
La specifica del TDA coda comprende normalmente
le seguenti operazioni:
Si noti che pile e code si distinguono solo per il significato delle operazioni! |
![]() ![]() |
|
La seguente interfaccia
definisce il tipo di dati astratto Queue
|
![]() ![]() |
|
Il significato dei metodi (la loro
semantica)
viene spiegato (in modo informale) dai commenti al codice, leggibili anche
con un browser grazie a javadoc:
Quindi:
Si noti il metodo lancia un'eccezione se viene eseguito da una coda vuota. L'eccezione EmptyQueueException è definita all'interno del package lab2.Exceptions. |
![]() ![]() |
|
Supponiamo di voler esaminare tutti gli
elementi presenti in una coda, ad esempio per stamparli. L'uso di un iteratore
sulla coda (come anche su di una pila) sarebbe improprio, visto che permetterebbe
di aggirare la politica di accesso (LIFO per pile, FIFO
per code).
Il seguente metodo stampa tutti gli elementi della coda
passata per argomento, estraendoli con dequeue:
Il ciclo while potrebbe anche essere scritto
nel seguente modo, sfruttando l'eccezione EmptyQueueException:
|
![]() ![]() |
|
Attenzione: Il metodo printDestroy
distrugge
la coda, che risulterà vuota anche per il metodo chiamante. Una
realizzazione più ragionevole dovrebbe ripristinare il contenuto
della coda prima di restituire il controllo:
|
![]() ![]() |
|
![]() ![]() |
1) Si definisca una classe con la seguente struttura:
2) Si fornisca una implementazione della
seguente
classe astratta:
3) Si definisca una classe con la seguente struttura:
|