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

i nodi) con componenti definiti con l’attributo POINTER. <strong>Il</strong> programma seguente ha lo scopo di<br />

generare una sequenza di 100 valori interi di tipo random e di organizzarli secondo un ordinamento<br />

ad albero binario. La sequenza così ordinata viene quindi riprodotta a video. Per poter<br />

comprendere appieno le operazioni svolte nel programma è opportuno tenere presente questo<br />

semplice schema il quale risulta applicabile in maniera del tutto generale a problemi di gestione<br />

di alberi binari:<br />

• Quando viene letto il primo valore viene allocata una variabile (il root node) atta ad<br />

ospitarlo e i due puntatori componenti vengono annullati.<br />

• Quando viene letto il valore successivo, viene creato un nuovo nodo per poterlo ospitare.<br />

• Se il nuovo valore risulta minore del valore del nodo radice, il puntatore before di root<br />

è indirizzato a questo nuovo nodo.<br />

• Se, invece, il nuovo valore risulta maggiore del valore del nodo radice, è il puntatore after<br />

di root ad essere indirizzato a questo nuovo nodo.<br />

• Letto un nuovo valore ed allocato memoria per esso, se esso risulta maggiore del valore<br />

di root ma il puntatore after è già associato, allora esso viene confrontato con il valore<br />

puntato da after ed il nuovo nodo viene inserito nella posizione appropriata al di sotto<br />

di quel nodo.<br />

• Se, invece, il nuovo valore risulta minore del valore di root ma il puntatore before è già<br />

associato, allora esso viene confrontato con il valore puntato da before ed il nuovo nodo<br />

viene inserito nella posizione appropriata al di sopra di quel nodo.<br />

MODULE binary_tree<br />

IMPLICIT NONE<br />

SAVE<br />

PRIVATE greater_than, less_than, equal_to<br />

TYPE :: node<br />

INTEGER :: int<br />

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

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

END TYPE<br />

INTERFACE OPERATOR(>)<br />

MODULE PROCEDURE greater_than<br />

END INTERFACE<br />

INTERFACE OPERATOR(

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

Saved successfully!

Ooh no, something went wrong!