Creare una Lista Lineare

Da Gambas-it.org - Wikipedia.

Nel linguaggio C una "Lista Lineare " (Linked List) è una serie ordinata e concatenata di Strutture omogenee che occupano posizioni di memoria non necessariamente consecutive (come invece è per gli "array"). [Nota 1]

Ogni Struttura rappresenta un "elemento" dell'intera "Lista lineare concatenata ".

L'ultimo membro di ciascuna Struttura (elemento) della "Lista", è un Puntatore alla Struttura successiva. In questo senso la Lista concatenata è formata - appunto - da una concatenazione di Strutture, ove ciascuna Struttura fa riferimento ad un'altra Struttura.
Se si è giunti all'ultimo elemento (Struttura) della Lista Lineare, il suo Puntatore è nullo (non punta ad alcunché).

Nella sostanza le Linked List sono particolari Strutture, che si collegano fra loro come una sorta di catena e che servono a memorizzare in modo dinamico una grande quantità non predefinita di dati.

Questo genere di Strutture si usa, quando non si conosce a priori quanti dati dovranno essere memorizzati; ed allora viene occupata memoria poco per volta, quando serve. Il primo dato viene "rintracciato" da un puntatore, che punta alla prima struttura. All'interno della prima struttura, oltre ai dati rilevanti, c'è - come ultimo suo membro - un Puntatore alla Struttura successiva, e così via a catena.

Al riguardo va sottolineato che nel codice Gambas il membro della Struttura, che fa da Puntatore alla successiva nuova Struttura concatenata, non deve essere dichiarato con la parola-chiave "As Struct", bensì soltanto con "As".

Mostriamo un semplice esempio per creare e gestire una "Lista Lineare":

Public Struct ELEMENTO
  i As Integer
  prossima As ELEMENTO
End Struct


Public Sub Main()

' Dichiara le seguenti variabili del tipo Struttura "LISTA":
' - "p", puntatore alla testa della "Lista";
' - "ap", puntatore ausiliario che permette la creazione degli elementi della "Lista" successivi al primo.
 Dim p, ap As ELEMENTO
 Dim n As Integer
 
' Crea una "Lista": la variabile "p" punta alla testa di tale "Lista":"
 p = New ELEMENTO
 
' Assegna un valore al primo membro (di tipo Integer) del primo elemento della "Lista":"
 p.i = 100
 
' Assegna ad "ap" il valore di "p". Entrambe le variabili fanno riferimento al primo elemento della "Lista":"
 ap = p
 
' Esegue un ciclo per creare i nuovi "elementi" della "Lista" concatenata successivi al primo, assegnando anche un valore al primo membro dell'elemento appena creato:"
 For n = 2 To 10
' Crea il nuovo "elemento" (ossia quello successivo) della "Lista" concatenato al precedente:"
   ap.prossima = New ELEMENTO
' Attualizza la variabile ausiliaria "ap", in modo da farla puntare al nuovo elemento (Struttura) della "Lista":"
   ap = ap.prossima
' Assegna un valore al primo membro (di tipo Integer) del nuovo elemento della "Lista":"
   ap.i = 100 * n
 Next
 
 
' Mostra quindi il risultato:"
 While Not IsNull(p)
   Print p.i
   p = p.prossima
 Wend
 
End


Note

[1] Vedi anche le seguenti pagine: