25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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!