Forse, se vedessimo insieme qualche funzione di servizio si potrebbe provare a superare la stanchezza?
Io ci provo.
Nei due precedenti post, qui e qui, abbiamo creato e modificato la nostra lista. Ma, come facciamo a vedere quello che c'è dentro la lista? Ovviamente con una funzione che ci stampa a schermo la lista.
Vediamo come:
Riassumendo, avevamo definito i tipi nodeT per l'elemento generico della lista e NodeP per puntare agli elementi della lista nel seguente modo:
typedef struct node{
int payload; // dato contenuto nel generico nodo della lista
struct node *next; // puntatore al prossimo elemento della lista
} nodeT; // Tipo del generico nodo della lista
typedef nodeT* nodeP; // Tipo puntatore a lista
|
Avevamo anche definito due variabili puntatore: firstP, il puntatore all'inizio lista, e lastP, il puntatore all'ultimo elemento della lista così:
nodeP firstP = NULL; // puntatore all'inizio della lista
nodeP lastP = NULL; // puntatore all'ultimo nodo della lista
|
La funzione printlist dovrà scandire gli elementi della lista dal primo all'ultimo e stampare il dato contenuto in ogni elemento.
In generale, per scandire una lista semplice collegata si segue il seguente algoritmo:
Si assegna ad un puntatore temporaneo il puntatore a inizio lista. Poi, se la lista non è vuota, si lavora sul primo elemento. Poi si aggiorna il puntatore temporaneo al successivo elemento e se non siamo a fine lista si lavora sull'elemento puntato. Si continua così fino a quando il puntatore temporaneo non punta a NULL (fine lista!).In C, la traduzione è la seguente:
nodeP tempP=firstP;
while (tempP!=NULL) {
// fai_qualcosa_sull'elemento corrente;
tempP=tempP->next;
}
|
Stampa in orizzontale di una lista di tre interi (4,0,4) |
Stampa in verticale di una lista di tre interi (89876, 4, 345) |
La funzione di stampa orizzontale è la seguente:
void printlisto(nodeP head)
{
int datal,i;
nodeP current;
current = head;
printf("\nSTART->");
while (current!= NULL) {
printf("[ %d ]->",current->payload); // fai qualcosa sull'elemento :)
current = current->next;
};
printf("NULL\n");
}
|
Nessun commento:
Posta un commento