Questa e' un mio esempio (scritto velocemente) ... spero non ci siano bug ...
codice:
typedef struct numeriDifib
{
int num;
struct numeriDifib *suc;
} Nf;
int fib(int num)
{
return (num < 2 ? num : fib(num-1) + fib(num-2));
}
Nf *creaListaFib(int n)
{
int i;
Nf *pHead=NULL, **ppNewItem;
if(n==0) return(NULL);
pHead = (Nf *)malloc(sizeof(Nf));
pHead->num = fib(1);
pHead->suc = NULL;
ppNewItem = &pHead->suc;
for(i=2; i<=n; i++)
{
(*ppNewItem) = (Nf *)malloc(sizeof(Nf));
(*ppNewItem)->num = fib(i);
(*ppNewItem)->suc = NULL;
ppNewItem = &((*ppNewItem)->suc);
}
return(pHead);
}
int main(void)
{
Nf *fib = creaListaFib(30);
Nf *tmp = fib;
do
{
printf("%d\n", tmp->num);
tmp = tmp->suc;
} while(tmp);
return 0;
}
E' una implementazione inefficiente (e capirai il perche' da solo) ma piu' "elegante" ...