Le liste dinamiche La ricorsione Esercizi Le liste dinamiche La ricorsione
Le liste dinamiche
Le liste dinamiche #include <stdio.h> #include <stdlib.h> struct Elem { int dato; struct Elem *prox; }; typedef struct Elem ElementoLista; typedef ElementoLista *Lista; Lista inserisciInLista (Lista lista, int dato); void scriviLista (Lista lista); Lista cancellaLista (Lista lista);
Le liste dinamiche Lista laMiaLista = NULL; void main() { unsigned int num, i; int d; printf ("Quanti dati? "); scanf ("%u", &num); for (i = 0; i < num; i++) printf ("Dato: "); scanf ("%d", &d); laMiaLista=inserisciInLista(laMiaLista,d); } scriviLista (laMiaLista); laMiaLista = cancellaLista (laMiaLista);
Le liste dinamiche Lista inserisciInLista (Lista lista, int dato) { Lista nuovoElem; nuovoElem=(Lista)malloc(sizeof(ElementoLista)); nuovoElem->dato = dato; nuovoElem->prox = lista; return nuovoElem; }
Le liste dinamiche void scriviLista (Lista lista) { Lista cursore; cursore = lista; while (cursore != NULL) printf ("%d\n", cursore->dato); cursore = cursore->prox; } printf ("Fine\n");
Le liste dinamiche Lista cancellaLista (Lista lista) { Lista temp, cursore; cursore = lista; while (cursore != NULL) temp = cursore->prox; free (cursore); cursore = temp; } return cursore;
Fattoriale L’utente inserisce alcuni numeri naturali e l’elaboratore ne calcola il fattoriale Ricordiamo che i fattoriale è definito come: n! = 1 sse n = 0 n! = n·(n – 1)! sse n > 0 Usiamo la definizione Algoritmo ricorsivo
Fattoriale #include <stdio.h> long int fatt (unsigned int n); void main() { unsigned int n, j, max; printf ("Quanti numeri?: "); scanf ("%u", &max); for (j = 1; j <= max; j++) { printf ("Introduci numero naturale: "); scanf ("%u", &n); printf ("Fattoriale: %lu\n", fatt (n)); }
Fattoriale long int fatt (unsigned int n) { long int tot; if (n == 0) } else tot = n * fatt (n – 1); return tot;
Fattoriale n=0 tot=1 n=1 tot=n*1 n=2 tot=n*1 3 n=3 tot=n*2 6