Pubblicato il

Come eliminare un elemento in testa a una lista lineare in C

Reading Time: 2 minutes

1 Cosa è una lista


Una lista è una collezione di elementi omogenei, cioè di elementi tra loro tutti uguali. A differenza dell’array, occupa in memoria una posizione qualsiasi, che tra l’altro può cambiare dinamicamente durante l’utilizzo della lista stessa.

2 Strumenti per creare una lista

Per questo tutorial andremmo a utilizzare strumenti come: free, puntatori e struct.

Le strutture, definibili con la parola chiave struct, permettono l’aggregazione di più variabili in un unico tipo.

Un puntatore è una variabile che contiene l’indirizzo di memoria di un’altra variabile.

free è il nome di una funzione delle librerie standard del linguaggio C (ma anche del linguaggio C++) e permette di deallocare in memoria.

L’utilizzo di tale funzione avviene come di seguito:

free(void puntr);

3 Cosa contiene una lista

Una lista:

  • Può contenere uno o più campi di informazione che possono essere di ogni tipo (es. int, char, float, ecc.), e un campo “puntatore al nodo successivo (next)”;
  • Ha il primo elemento della lista che è un puntatore a nodo di tipo Nodo*, quando la lista è vuota, questo puntatore è settato a NULL.
  • Esempio di dichiarazione di una lista: Nodo *lista = NULL;
  • L’ultimo nodo della lista ha il campo “next” settato a NULL

Esempio grafico di una lista lineare

4 Struttura base di una lista lineare

Definizione della struttura Nodo:

Struct Nodo{        
int info; //variabile che contiene l’informazione, puo essere di qualsiasi tipo(int,float,double…)        
struct Nodo* next //Puntatore al prossimo elemento della lista 
}; 
typedef struct Nodo Nodo;

5 Esempio di eliminazione in testa di un elemento in una lista lineare

Prototipo:

Nodo *eliminaInTesta(Nodo *list);

Esempio:

Nodo *eliminaInTesta(Nodo *list){
     Nodo *aux = NULL; // puntatore 
 
     if(list != NULL){ // controlla se la lista ha elementi
         aux = list->next; // Salva l’indirizzo della futura nuova testa( secondo elemento)
         free(list); // libera in memoria il primo elemento della testa
         list = aux; // Assegna alla lista la nuova testa 
     }
 
     return list;
 }