Google+ Quarta Info B: LE LISTE CONCATENATE

domenica 9 dicembre 2012

LE LISTE CONCATENATE

Una lista concatenata è una particolare struttura dati utilizzata nella programmazione informatica, in particolar modo nel linguaggio C, C++ e Java.
Alla base delle liste concatenate troviamo i puntatori, i link, particolari riferimenti che puntano ad un nodo, cioè un particolare dispositivo hardware, contenuto nel sistema, in grado di comunicare con gli altri dispositivi presenti nella rete. La lista concatenata consiste in una sequenza di questi nodi, con al loro interno dei dati specifici e dei link che collegano tra loro i vari nodi.

Le liste linearmente concatenate si suddividono in 2 grandi categorie:
-Liste semplicemente concatenate: Il collegamento (link) punta al nodo successivo, che a sua volta punterà a quello dopo e così via, terminando quando si avrà un valore vuoto o nullo(NULL).
-Liste doppiamente cocatenate: Il collegamento di ogni nodo punta sia al nodo precedente che a quello successivo. Se il precedente è vuoto o NULL allora quello è il primo nodo della lista; se, invece, il successivo è vuoto o NULL allora quello è l'ultimo nodo.
Una lista concatenata può ingrandire o diminuire la sua dimensione a piacere.


Le politiche di gestione delle liste concatenate sono principalmente 3:
-FIFO(First In First Out): Il primo nodo che richiede di entrare nella lista viene messo in testa a questa, in modo da essere il primo ad essere eseguito.
-LIFO(Last In First Out): L'ultimo nodo che richiede di entrare nella lista viene messo in testa a questa, in modo che nonostante sia l'ultimo ad entrare, sia il primo ad essere eseguito.
-Crescente o Decrescente: Queste due politiche funzionano in maniera contraria, cioè nella prima i nodi vengono messi in ordine dall'ultimo che fa la rpichiesta al primo, invece nella seconda avviene l'esatto opposto, cioè il primo che fa la richiesta, sarà anche il primo ad andare in esecuzione.

Per poter cancellare un nodo all'interno di una lista concatenata, va eliminato tale nodo e poi va creato un collegamento tra il nodo precedente a quello cancellato e quello successivo.                 B-->next=C-->next(D)

Ecco il codice per poter cancellare un nodo:

void cancella(nodo*t,nodo*p)
{
          nodo*a;
          if(t!=NULL)
         {
                    a=t;
                    while(a-->next!=NULL && a-->next!=p)
                    {
                               a=a-->next;
                     }
                     if(a-->next!=NULL)
                    {
                               a-->next=p-->next;
                               free(p);
                    }
          }
}

Nessun commento:

Posta un commento