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

INTEGER :: istat<br />

TYPE(node), POINTER :: root ! testa dell’albero<br />

TYPE(node), POINTER :: temp ! contiene il valore corrente<br />

! --- Sezione esecutiva ---<br />

NULLIFY(root,temp)<br />

! Ora si valutano 100 valori reali random e li si converte<br />

! in interi compresi tra 0 1 100<br />

CALL RANDOM_NUMBER(random)<br />

input = INT(100*random)<br />

WRITE(*,"(’Elenco originale:’,(/,2X,I10))") input<br />

! Ora viene creato un nodo per ciascun intero e lo si inserisce nell’albero<br />

DO i = 1,100<br />

ALLOCATE(temp,STAT=istat)<br />

temp%int = input(i)<br />

CALL add_node(root,temp)<br />

END DO<br />

WRITE(*,"/,(’Elenco ordinato:’)")<br />

CALL write_node(root)<br />

CONTAINS<br />

RECURSIVE SUBROUTINE add_node(ptr,new_node)<br />

! Scopo: aggiungere un nodo ad un albero binario<br />

TYPE(node), POINTER :: ptr ! puntatore alla posizione corrente<br />

TYPE(node), POINTER :: new_node ! puntatore al nuovo nodo<br />

IF(.NOT.ASSOCIATED(ptr)) THEN<br />

! Se non esiste ancora alcun albero, questo e’ il primo nodo<br />

ptr => new_node<br />

ELSE<br />

IF (new_node < ptr) THEN<br />

IF(ASSOCIATED(ptr%before)) THEN<br />

CALL add_node(ptr%before,new_node)<br />

ELSE<br />

ptr%before => new_node<br />

END IF<br />

ELSE<br />

IF(ASSOCIATED(ptr%after)) THEN<br />

CALL add_node(ptr%after,new_node)<br />

ELSE<br />

ptr%after => new_node<br />

END IF<br />

END IF<br />

END IF<br />

END SUBROUTINE add_node

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

Saved successfully!

Ooh no, something went wrong!