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;
 } 

Pubblicato il

Come inserire 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: malloc, puntatori e struct.

malloc è il nome di una funzione delle librerie standard del linguaggio C (ma anche del linguaggio C++) ed è l’abbreviazione di “memory allocation” (allocamento di memoria).

L’utilizzo di tale funzione avviene come di seguito:

void* malloc(size_t size);

 Tale funzione alloca in memoria un numero di bytes pari a size, restituendo un puntatore di tipo void che indica un generico indirizzo di memoria.

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.

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 inserimento in testa di un elemento in una lista lineare

Prototipo:

Nodo* aggiungiInTesta(Nodo* list, int val);

Esempio:

Nodo* aggiungiInTesta(Nodo* list, int val) {     
Nodo* nuovoElemento = NULL; // Puntatore       
nuovoElemento = (Nodo*) malloc(sizeof(Nodo)); // Allocazione   
if (nuovoElemento == NULL) { // Check dell’allocazione se è andata a buon fine         
printf("Errore in memoria.");        
 exit(-1);     
}     
// Assegnazione al next della nuova testa l'indirizzo della vecchia    
 nuovoElemento->next = list;     // Assegnazione all'info della nuova testa il valore passato      
 nuovoElemento->info = val;     // Restituisce l’indirizzo del primo elemento della lista   
  return nuovoElemento; 
}