Le Liste a Puntatorei Vettori
L’uso degli Array monodimensionali, o Vettori, è il metodo più semplice per la memorizzazione
di elenchi di elementi omogenei, pur presentando alcuni problemi:
Svantaggi
In molti casi, quindi, si rende necessario ricorrere a un metodo che permetta di assegnare alle celle un ordinamento logico arbitrario, differente dal loro ordinamento fisico, migliorando l’efficienza delle operazioni di manutenzione dei dati. le Liste
Una Lista è una successione di elementi che occupano in memoria posizioni qualsiasi.
La chiave d'accesso alla Lista,
puntatore di Testa, è una variabile che contiene l’indirizzo del primo
elemento. L’ultimo elemento della lista riporta una marca speciale nel
campo NEXT, detta NIHIL o Ø.
Svantaggi
Ad esempio la gestione del File System su un disco avviene con la suddivisione del disco in blocchi di grandezza fissata (512 byte di informazione per DOS-Windows) con una tabella iniziale che associa ad ogni nome-file un puntatore di testa al primo blocco del file (F.A.T.). Inserimento in una listaPer aggiungere un nuovo elemento in una lista è sufficiente modificare solo l’elemento precedente il punto di inserimento (individuato, ad esempio, tramite una ricerca):
Se l’inserimento deve avvenire in testa, occorre modificare il puntatore PT :
Per unificare le operazioni, si può utilizzare come puntatore di testa un intero Nodo (il cui campo Info andrà sprecato). In questo modo possiamo implementare la stessa procedura sia per gli inserimenti in testa (Prec indicherà il Nodo di Testa) che per gli inserimenti in un punto qualsiasi della lista.
Estrazione da una listaPer eliminare un elemento (individuato, ad esempio, tramite una ricerca) da una lista è necessario modificare l’elemento precedente; nelle operazioni di ricerca saranno perciò necessari due puntatori: Succ, che indica l'elemento da eliminare dalla Lista, e Prec, che indica l'elemento precedente di cui modificare il campo NEXT.
La sequenza è la stessa anche se Succ indica l’ultimo elemento della lista; viceversa, se l’estrazione deve avvenire dalla testa, occorre modificare il puntatore PT.
Anche in questo caso, utilizzando come puntatore di testa un intero Nodo, possiamo implementare la stessa procedura sia per le estrazioni dalla testa che per le estrazioni da un punto qualsiasi della lista. Scansione di una ListaPer accedere ad un elemento della lista occorre attraversare tutti i nodi precedenti: la scansione si arresta quando il puntatore al nodo successivo è Ø.
Se la scansione, prevede successivamente un inserimento o una estrazione, è necessario utilizzare due puntatori, in modo da disporre sempre dell’indirizzo del nodo Precedente. È conveniente usare come puntatore di testa un intero nodo:
Esempio
Gestione di una lista lineare a singolo puntatore. |