31.05.2013 Views

Esercizi e progetti di programmazione - Apogeo

Esercizi e progetti di programmazione - Apogeo

Esercizi e progetti di programmazione - Apogeo

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!