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.

386 Puntatori<br />

value<br />

pointer<br />

Figura 7.1: Generico nodo di lista concatenata<br />

• Non sono immagazzinati necessariamente in maniera contigua.<br />

• Possono essere creati dinamicamente (cioè al tempo di esecuzione).<br />

• Possono essere inseriti in un punto qualsiasi della lista.<br />

• Possono essere rimossi dinamicamente.<br />

Per tale ragione una lista può crescere o ridursi in maniera arbitraria durante l’esecuzione<br />

di un programma.<br />

Una lista concatenata consiste essenzialmente di strutture (ossia, con terminologia <strong>Fortran</strong>,<br />

di oggetti di tipo derivato) contenenti campi per i comuni dati e in più un ulteriore campo che<br />

rappresenta un puntatore al successivo elemento della lista. Per convenzione il primo e l’ultimo<br />

nodo della lista vengono chiamati rispettivamente testa e coda della lista.<br />

<strong>Il</strong> programma che segue vuole essere un esempio introduttivo al problema della definizione<br />

di liste concatenate:<br />

PROGRAM simple_linked_list<br />

IMPLICIT NONE<br />

! Definizione di un nodo<br />

TYPE node<br />

INTEGER :: value<br />

TYPE (node), POINTER :: next<br />

END TYPE node<br />

INTEGER :: num<br />

! Dichiarazione del nodo corrente e dell’intera lista<br />

TYPE (node), POINTER :: list, current<br />

! Costruzione della lista<br />

NULLIFY(list) ! inizialmente la lista e’ vuota<br />

DO<br />

READ(*,*) num ! legge un valore dalla tastiera<br />

IF (num==0) EXIT ! il ciclo si arresta quando viene inserito 0<br />

ALLOCATE(current) ! crea un nuovo nodo<br />

current%value = num ! immagazzina il nuovo valore<br />

current%next => list ! punta al nodo precedente<br />

list => current ! aggiorna la testa della lista<br />

END DO<br />

! Attraversa la lista e ne stampa i valori<br />

current => list ! current e’ un alias della lista<br />

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

Saved successfully!

Ooh no, something went wrong!