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 3<strong>95</strong><br />

2 25<br />

3 45<br />

Oggetto: 25 Oggetto rimosso? T<br />

Valore dell’oggetto:<br />

1 15<br />

2 45<br />

Stato della lista. Lista vuota? F<br />

Valore dell’oggetto:<br />

1 15<br />

2 35<br />

3 45<br />

Oggetto: 15 Oggetto rimosso? T<br />

Oggetto: 45 Oggetto rimosso? T<br />

Valore dell’oggetto:<br />

1 35<br />

Stato della lista. Lista vuota? F<br />

Oggetto: 35 Oggetto rimosso? T<br />

Stato della lista. Lista vuota? T<br />

Si osservi, in conclusione, come le liste concatenate siano molto più flessibili dei comuni array.<br />

Infatti, come è noto, per un array statico le dimensioni devono essere fissate già in fase di<br />

compilazione il che, ad esempio, comporta che per rendere un codice di applicabilità generale è<br />

necessario dichiarare gli array con le dimensioni massime compatibili con l’assegnato problema il<br />

che rende certamente non ottimale l’impiego della memoria. Anche l’impiego di array allocabili<br />

non risolve del tutto il problema in quanto, se da un lato essi consentono di adattare la quantità<br />

di memoria allocata alle reali esigenze di calcolo, dall’altro è sempre necessario conoscere le<br />

dimensioni che devono avere gli array (ossia di quanti elementi essi debbono comporsi) prima di<br />

allocarli. Al contrario le liste concatenate consentono di allocare un solo elemento per volta per<br />

cui non è assolutamente necessario conoscere in anticipo il numero di elementi (ossia il numero<br />

di nodi) di cui si comporrà la struttura dati al termine dell’esecuzione. Questa possibilità può<br />

essere sfruttata, ad esempio, quando si vogliano risolvere equazioni differenziali alle differenze<br />

finite su domini semi-infiniti e l’infinito numerico può essere riconosciuto soltanto durante il run<br />

a valle dell’allocazione (e dell’utilizzo) di strutture dati atte a contenere le variabili del calcolo.<br />

7.11.2 Alberi binari<br />

Gli alberi binari rappresentano una delle strutture dati dinamiche più importanti dell’informatica.<br />

Un albero binario consiste di componenti ripetuti (nodi) arrangiati secondo una struttura<br />

ad albero invertito. L’elemento in cima all’albero è chiamato radice (root). Gli elementi situati<br />

immediatamente al di sotto di un nodo ne sono chiamati figli (children), di rimando, l’elemento<br />

situato direttamente al di sopra di un altro nodo ne è detto il genitore (parent). Infine, un<br />

elemento privo di figli è chiamato foglia (leaf ) dell’albero.<br />

In generale, un albero binario rappresenta una struttura dati contenente una sequenza di<br />

elementi registrati secondo l’ordine di inserimento ma riordinati secondo un assegnato criterio

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

Saved successfully!

Ooh no, something went wrong!