Esercizi e progetti di programmazione - Apogeo
Esercizi e progetti di programmazione - Apogeo
Esercizi e progetti di programmazione - Apogeo
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Figura 8<br />
Aggiungere e rimuovere<br />
elementi in una coda<br />
Figura 9<br />
Coda che si “riavvolge”<br />
attorno alla fi ne dell’array<br />
ESERCIZI E PROGETTI DI PROGRAMMAZIONE E–63<br />
* <strong>Esercizi</strong>o P14.15. Realizzate una classe Stack usando una lista concatenata per memorizzarne<br />
gli elementi. Non realizzate una classe parametrica.<br />
** <strong>Esercizi</strong>o P14.16. Realizzate una coda come array circolare, nel modo seguente. Usate due variabili,<br />
head e tail, che contengono l’in<strong>di</strong>ce del prossimo elemento da eliminare e del prossimo<br />
elemento da aggiungere: dopo che un elemento viene eliminato o aggiunto, il relativo in<strong>di</strong>ce viene<br />
incrementato (si veda la Figura 8).<br />
Dopo alcuni passi <strong>di</strong> funzionamento, l’elemento tail raggiungerà la fi ne dell’array, dopo<strong>di</strong>ché<br />
“si riavvolge” e riparte da 0 (si veda la Figura 9): per tale ragione, l’array viene chiamato “circolare”.<br />
public class CircularArrayQueue<br />
{<br />
private int head;<br />
private int tail;<br />
private int theSize;<br />
private Object[] elements;<br />
}<br />
public CircularArrayQueue(int capacity) {...}<br />
public void add(Object element) {...}<br />
public Object remove() {...}<br />
public int size() {...}<br />
Questa realizzazione fornisce una coda <strong>di</strong> <strong>di</strong>mensioni limitate, che può anche riempirsi. Nel prossimo<br />
esercizio vedrete come rimuovere questo vincolo.<br />
*** <strong>Esercizi</strong>o P14.17. La coda dell’esercizio precedente può riempirsi, se vengono aggiunti più elementi<br />
<strong>di</strong> quanti possono essere contenuti nell’array. Migliorate la realizzazione nel modo seguente: quando<br />
l’array si riempie, costruite un array più grande, copiate i valori nel nuovo array e assegnatelo alla<br />
variabie <strong>di</strong> esemplare elements. Suggerimento: Non potete semplicemente copiare gli elementi nel<br />
nuovo array nella stessa posizione che occupano nel vecchio; spostate, invece, l’elemento iniziale<br />
della coda nella posizione 0, e così via.<br />
Cay Horstmann: Concetti <strong>di</strong> informatica e fondamenti <strong>di</strong> Java 5 a ed. - Copyright 2010 <strong>Apogeo</strong> srl