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.

392 Puntatori<br />

MODULE linked_list<br />

USE class_object<br />

IMPLICIT NONE<br />

TYPE node ! generico nodo della lista<br />

PRIVATE<br />

TYPE(object) :: value ! componente del nodo<br />

TYPE(node),POINTER :: next ! puntatore al prossimo nodo<br />

END TYPE node<br />

TYPE list ! lista concatenata di nodi<br />

PRIVATE<br />

TYPE(node),POINTER :: first ! primo oggetto della lista<br />

END TYPE list<br />

CONTAINS<br />

SUBROUTINE delete (links,obj,found)<br />

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

TYPE(object),INTENT(IN) :: obj<br />

LOGICAL,INTENT(OUT) :: found<br />

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

! Cerca la posizione di obj<br />

previous => links%first ! comincia dalla testa della lista<br />

current => previous%next<br />

found = .FALSE. ! inizializza<br />

DO<br />

IF (found.OR.(.NOT.ASSOCIATED(current))) RETURN ! fine lista<br />

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

found = .TRUE.<br />

EXIT<br />

ELSE ! si sposta sul nodo successivo nella lista<br />

previous => previous%next<br />

current => current%next<br />

END IF<br />

END DO<br />

! Elimina il nodo se esso e’ stato trovato<br />

IF (found) THEN<br />

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

DEALLOCATE(current) ! liberato lo spazio per il nodo<br />

END IF<br />

END SUBROUTINE delete<br />

SUBROUTINE insert(links,obj)<br />

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

TYPE(object),INTENT(IN) :: obj

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

Saved successfully!

Ooh no, something went wrong!