Differenze tra le versioni di "Creare una Lista Lineare"

Da Gambas-it.org - Wikipedia.
 
(7 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Nel linguaggio C una "''Lista Lineare'' " (''Linked List'') è una serie ordinata e concatenata di ''Strutture'' omogenee che occupano posizioni di memoria <SPAN Style="text-decoration:underline">non</span> necessariamente consecutive. <SUP>&#091;[[#Note|Nota 1]]&#093;</sup>
+
Nel linguaggio C una "''Lista Lineare'' " (''Linked List'') è una serie ordinata e concatenata di ''Strutture'' omogenee che occupano posizioni di memoria <SPAN Style="text-decoration:underline">non</span> necessariamente consecutive (come invece è per gli "array"). <SUP>&#091;[[#Note|Nota 1]]&#093;</sup>
  
L'ultimo membro di ciascuna ''Struttura'', o ''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''. Ogni ''Struttura'' rappresenta un "elemento" dell'intera ''Lista" concatenata.
+
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''.
 
<BR>Se si è giunti all'ultimo elemento (''Struttura'') della ''Lista Lineare'', il suo Puntatore è nullo (non punta ad alcunché).
 
<BR>Se si è giunti all'ultimo elemento (''Struttura'') della ''Lista Lineare'', il suo Puntatore è nullo (non punta ad alcunché).
  
Riga 7: Riga 9:
  
 
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.
 
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, <SPAN Style="text-decoration:underline">non</span> deve essere dichiarato con la parola-chiave "As Struct", bensì soltanto con "As".
  
 
Mostriamo un semplice esempio per creare e gestire una "Lista Lineare":
 
Mostriamo un semplice esempio per creare e gestire una "Lista Lineare":
Riga 17: Riga 21:
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
   
 
   
  <FONT Color=gray>' ''Dichiara le seguenti variabili del tipo Struttura "LISTA":
+
  <FONT Color=gray>' ''Dichiara le seguenti variabili del tipo Struttura "LISTA":''
  - "p", puntatore alla testa della "Lista";
+
  ' ''- "p", puntatore alla testa della "Lista";''
  - "ap", puntatore ausiliario che permette la creazione degli elementi della "Lista" successivi al primo.''</font>
+
  ' ''- "ap", puntatore ausiliario che permette la creazione degli elementi della "Lista" successivi al primo.''</font>
 
   Dim p, ap As ELEMENTO
 
   Dim p, ap As ELEMENTO
   Dim i As Integer
+
   Dim n As Integer
 
    
 
    
 
  <FONT Color=gray>' ''Crea una "Lista": la variabile "p" punta alla testa di tale "Lista":"</font>
 
  <FONT Color=gray>' ''Crea una "Lista": la variabile "p" punta alla testa di tale "Lista":"</font>
Riga 33: Riga 37:
 
    
 
    
 
  <FONT Color=gray>' ''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:"</font>
 
  <FONT Color=gray>' ''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:"</font>
   For i = 2 To 10
+
   For n = 2 To 10
  <FONT Color=gray>' ''Crea il nuovo "elemento" della "Lista" concatenato al precedente:"</font>
+
  <FONT Color=gray>' ''Crea il nuovo "elemento" (ossia quello successivo) della "Lista" concatenato al precedente:"</font>
 
     ap.prossima = New ELEMENTO
 
     ap.prossima = New ELEMENTO
 +
<FONT Color=gray>' ''Attualizza la variabile ausiliaria "ap", in modo da farla puntare al nuovo elemento (Struttura) della "Lista":"</font>
 
     ap = ap.prossima
 
     ap = ap.prossima
     ap.i = 100 * i
+
<FONT Color=gray>' ''Assegna un valore al primo membro (di tipo Integer) del nuovo elemento della "Lista":"</font>
 +
     ap.i = 100 * n
 
   Next
 
   Next
 
    
 
    
Riga 43: Riga 49:
 
  <FONT Color=gray>' ''Mostra quindi il risultato:"</font>
 
  <FONT Color=gray>' ''Mostra quindi il risultato:"</font>
 
   While Not IsNull(p)
 
   While Not IsNull(p)
  Print p.i
+
    Print p.i
  p = p.prossima
+
    p = p.prossima
 
   Wend
 
   Wend
 
    
 
    

Versione attuale delle 15:52, 22 nov 2020

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: