25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

7.11 Strutture dati dinamiche 387<br />

value<br />

pointer −→<br />

value<br />

pointer −→· · · −→<br />

value<br />

pointer −→<br />

Figura 7.2: Lista concatenata<br />

value<br />

pointer −→<br />

DO<br />

IF (.NOT.ASSOCIATED(current)) EXIT ! esce quando arriva alla coda<br />

PRINT*, current%value ! stampa il valore<br />

current => current%next ! current e’ un alias del prossimo nodo<br />

END DO<br />

STOP<br />

END PROGRAM simple_linked_list<br />

Si osservi attentamente le operazioni effettuate dal programma precedente:<br />

• Inizialmente viene definito un tiponode contenente un valore intero quale campo numerico<br />

ed un componente puntatore che punta ad un oggetto dello stesso tipo.<br />

• Vengono dichiarate due variabili, list e current, di tipo node, la prima delle quali verrà<br />

usata per puntare alla testa della lista, la seconda al generico nodo della lista.<br />

La procedura di costruzione della lista viene illustrata progressivamente come segue:<br />

• All’inizio la lista è vuota sicché essa viene inizializzata ”annullando” il suo alias list.<br />

• Supponendo di acquisire da tastiera un valore intero la lista viene così creata e composta<br />

da un solo nodo atto ad ospitare il valore appena acquisito. Ciò ha luogo innanzitutto<br />

allocando dinamicamente della memoria per il nodo current, quindi immagazzinandovi<br />

il valore nel campo numerico preposto e, infine, facendo sì che la lista, attraverso il suo<br />

alias list, punti alla testa della lista che è ora rappresentata dal nodo appena allocato.<br />

• <strong>Il</strong> procedimento descritto al punto precedente viene ripetuto identicamente fino a che non<br />

venga inserito da tastiera il valore 0.<br />

Una volta costruita la lista, il compito successivo sarà quello di scorrerne gli elementi e stamparne<br />

i valori. Ciò viene effettuato al modo seguente:<br />

• Si rende l’oggetto current un alias di list facendo sì che esso punti al nodo di testa<br />

della lista.<br />

• Si stampa il valore di quel nodo (ossia il campo numerico di current%value).<br />

• Al termine della stampa l’oggetto current è fatto puntare al nodo successivo.<br />

• <strong>Il</strong> procedimento testé descritto viene iterato fino a che non viene incontrato un nodo non<br />

associato (vale a dire il nodo di coda della lista).

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

Saved successfully!

Ooh no, something went wrong!