Suppongo che l'elemento della lista sia:
struct elemento {
int inf;
struct elemento *pun;
}
La tua lista sarà dichiarata:
struct elemento *lista;
La funzione size restituisce la lunghezza della lista. Bisogna prima passarglie la lista per referenza.
Richiamo della funzione:
miaVariabile = size (lista)
La funzione size:
int size (struct elemento *nodo)
{
int cont; /*contatore*/
cont = 0;
while (nodo->pun!=NULL)
{
cont++;
nodo = nodo->pun;
}
return (cont++);/*bisogna incrementare cont ancora
di 1 se no nn viene conteggiato l'ultimo
elemento*/
}
Ti posto un programma che crea una in modo dinamico e ti conta il numero di elementi. Fa uso della libreria standard.
#include <stdio.h>
struct elemento {
int inf;
struct elemento *pun;
};
int size (struct elemento *nodo)
{
int cont; /*contatore*/
cont = 0;
while (nodo->pun!=NULL)
{
cont++;
nodo = nodo->pun;
}
return (cont++);/*bisogna incrementare cont ancora
di 1 se no nn viene conteggiato l'ultimo
elemento*/
}
struct elemento *crea_lista()
{
struct elemento *p, *punt;
int i, n;
printf("Specificare il numero di elementi... ");
scanf("%d", & n);
if(n==0)
{
p = NULL; /* lista vuota*/
}
else
{
/* creazione primo elemento */
p = (struct elemento *)malloc(sizeof(struct elemento));
printf("Inserisci il primo valore: ");
scanf("%d", & p->inf);
punt = p;
/* creazione elementi successivi */
for(i=2; i<=n; i++)
{
punt->pun = (struct elemento *)malloc(sizeof(struct elemento));
punt = punt->pun;
printf("Inserisci il %d elemento: ", i);
scanf("%d", & punt->inf);
} /* chiudo il for*/
punt->pun = NULL; /* marcatore fine lista*/
} /* chiudo l'if-else*/
return(p);
} /* chiudo la funzione*/
int main (void)
{
struct elemento *lista;
lista = crea_lista();
printf("La lista Š lunga: %d\n",size(lista));
while(!kbhit());/*aspetto che sia premuto un tasto*/
return (0);
}
Alcune porzioni di codice sono state prese da
Spero di essere stato esauriente e chiaro!!! Se non capisci chiedi senza problemi!
Ciao