Con questo post presento una libreria con implementate alcune funzioni per gestire le liste.

La lista è una struttura dati astratta che permette di memorizzare dei dati, di qualsiasi tipo essi siano, in modo dinamico, ovvero la memoria utilizzata non è necessariamente contigua. Questo è un vantaggio quando ho grandi quantità di dati da salvare, perché anche se le celle di memoria che ho a disposizione per salvare i dati non sono in sequenza, con una lista riesco comunque a raggiungere il mio obbiettivo: quando devo memorizzare un numero considerevole di dati, potrei non avere sufficiente memoria heap sequenziale dove immagazzinare le mie informazioni, le liste riescono ad ovviare a questo problema.

Funzionano con una struttura fondamentale che contiene l’elemento da memorizzare e un puntatore all’elemento successivo, in questo modo il blocco di dati viene diviso in singoli container con 1 elemento ciascuno. La memoria dunque non viene allocata per tutto l’array di dati, ma solo per il singolo container, senza aver bisogno di aver a  disposizione celle contigue di memoria. I singoli container possono essere salvati in modo ottimizzato, e per accedere al container successivo si segue il puntatore salvato all’interno di quello corrente. Tutto ciò si traduce in un costo computazionale per l’inserimento di un elemento in una lista sempre pari a O(1).

E’ una struttura astratta e può essere applicata a ogni tipo di dato, dai numeri, alle stringhe, fino a strutture dati più complesse, ovviamente maggiore sarà la dimensione del dato da memorizzare, maggiore sarà la dimensione del singolo container.

I file della libreria si possono scaricare a questo link: https://github.com/LeoMirots/Lists