LISTE
Una LISTA è una sequenza ordinata e finita di elementi, possiamo dire un multinsieme in cui lo
stesso valore dell’insieme può essere presente anche più volte.
Ciascun elemento della lista occupa una posizione ben precisa, come in una sequenza, quindi siamo
in grado di individuare, il primo, il secondo….. l’ultimo elemento della lista.
Generalmente un multinsieme è gestito attraverso l’uso dei vettori con allocazione statica della
memoria, in questo caso si tratta dell’implementazione statica di una lista, basata su un array.
Questa soluzione presenta però molti limiti:
a) Allocazione di memoria statica: occupa, già inizialmente, tutto lo spazio richiesto dalla
struttura
b) Difficoltà ad inserire l’n+1-esimo elemento se gli n elementi previsi non sono sufficienti
Nella risoluzione dei problemi informatici, si può rendere necessario dover gestire collezioni di dati,
le cui dimensioni variano dinamicamente (ci sono casi in cui la dimensione degli elementi è
sconosciuta al programmatore) e spesso, se ne vuole, allocare a tempo di esecuzione, solo la
memoria strettamente necessaria; si ricorre, allora, ad una implementazione basata sulla gestione
dinamica della memoria attraverso l’allocazione di riferimenti ad oggetti.
L’oggetto, viene in un primo momento dichiarato, quindi gli viene assegnato un nome ed un
indirizzo della zona di memoria chiamata STACK, e attraverso la funzione NEW viene creata una
parte dinamica, allocata nella zona di memoria HEAP contenente tutte le caratteristiche specifiche
del nostro oggetto e quindi la sua vera struttura, così come specificato nella classe a cui l’oggetto
appartiene. Le celle di memoria dinamiche, sono create e distrutte, quando il programma è in
esecuzione.
Il Garbage Collector, speciale routine di sistema, provvede alla pulizia della memoria, infatti si
occupa di ricercare nell’Heap, gli oggetti non più referenziati, rendendo disponibile la memoria che
essi occupavano.
Gli elementi della lista sono individuati come NODI, mentre i riferimenti sono individuati come
ARCHI
Nothing
Radice
o testa
elementi della lista o NODI
Un elemento della nostra lista, è una struttura a due campi, il primo campo contiene il valore
dell’elemento, il secondo campo, contiene l’indirizzo di memoria in cui si trova l’elemento ad esso
logicamente connesso (elemento successivo).
Solo i tipi Riferimento, possono contenere il valore Nothing
Attraverso la funzione IsNothing, utilizzabile solo sui tipi riferimento, è possibile determinare se è
presente o meno un riferimento ad altro oggetto.
Ogni elemento della lista conosce il suo successore, quindi partendo dal primo elemento della lista,
è possibile attraversare tutti gli elementi.
Le strutture dati dinamiche, sono gestire dal programmatore, attraverso operazioni che variano in
funzione della forma di aggregazione dei vari elementi, generalmente possiamo classificarle in: PILA,
CODA, LISTA, GRAFO ed ALBERO.
PILA
La PILA è una struttura dati dinamica gestita in modalità LIFO (LAST IN FIRST OUT), l’ultimo
elemento inserito è il primo ad essere estratto, proprio come per una pila di piatti. Gli elementi si
rappresentano come idealmente posizionati uno sopra l’altro, e vengono inseriti (PUSH) ed estratti
(POP) dalla stessa estremità, uno alla volta. Questa struttura viene utilizzata, quando si vuole tenere
traccia di informazioni da recuperare, nell’ordine inverso, rispetto all’ordine di inserimento
(pensiamo, ad esempio all’operazione che permette di annullare le ultime operazioni eseguite)
Inserimento
(Push)
Estrazione
(Pop)
Nothing
Testa
Inserimenti ed estrazioni avvengono dallo stesso estremo
Inserimento
Estrazione
CODA
La CODA è una struttura dinamica, gestita in modalità FIFO (FIRST IN FIRST OUT). L’inserimento
(PUSH) degli elementi avviene ad una estremità; l’estrazione (POP) di un elemento avviene dal lato
opposto.
L’organizzazione a CODA viene utilizzata per memorizzare dinamicamente informazioni che devono
essere recuperate nello stesso ordine con cui sono state inserite; esempio classico è una coda di
clienti in fila allo sportello postale, oppure la gestione dello Spool di stampa, in cui i documenti da
stampare devono essere prodotti con lo stesso ordine con cui sono inviati alla stampa.
Nothing
Nothing
Inserimento in coda
Nothing
Estrazione in testa
LISTA CONCATENATA
La lista concatenata è una successione di elementi di cui conosce il riferimento al primo nodo
detto testa, ed il riferimento all’ultimo nodo detto coda della lista o fondo.
Esistono diversi tipi di lista: Lista semplice, Lista ordinata, Lista doppia che può essere percorsa nei
due sensi. Gli inserimenti in una lista, possono avvenire in testa, in coda, oppure in una posizione
all’interno della lista (per rispettare un ordine ben preciso).