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 393<br />

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

! Cerca la posizione dove inserire il nuovo oggetto<br />

previous => links%first ! inizializza<br />

current => previous%next<br />

DO<br />

IF (.NOT.ASSOCIATED(current)) EXIT ! inserisce alla fine<br />

IF (obj < current%value) EXIT ! *** sovrapposto ***<br />

previous => current<br />

current => current%next ! si sposta sul prossimo nodo<br />

END DO<br />

! Inserisce l’oggetto prima di quello corrente (sono permessi duplicati)<br />

ALLOCATE(previous%next) ! alloca nuovo spazio in memoria<br />

previous%next%value = obj ! nuovo oggetto inserito<br />

previous%next%next => current<br />

END SUBROUTINE insert<br />

FUNCTION is_empty(links) RESULT(t_or_f)<br />

TYPE(list),INTENT(IN) :: links<br />

LOGICAL :: t_or_f<br />

t_or_f = .NOT.ASSOCIATED(links%first%next)<br />

END FUNCTION is_empty<br />

FUNCTION new() RESULT(new_list)<br />

TYPE(list) :: new_list<br />

ALLOCATE(new_list%first) ! alloca memoria per l’oggetto<br />

NULLIFY(new_list%first%next) ! comincia con una lista vuota<br />

END FUNCTION new<br />

SUBROUTINE print_list (links)<br />

TYPE(list),INTENT(IN) :: links<br />

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

INTEGER :: counter<br />

current => links%first%next<br />

counter = 0<br />

PRINT*,"Valore dell’oggetto:"<br />

DO<br />

IF (.NOT.ASSOCIATED(current)) EXIT ! fine lista<br />

counter = counter+1<br />

PRINT*, counter," ",current%value<br />

current => current%next<br />

END DO<br />

END SUBROUTINE print_list<br />

END MODULE linked_list

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

Saved successfully!

Ooh no, something went wrong!