La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1.Scrivere una funzione per cercare un numero x in una lista circolare di interi. La funzione deve restituire NULL se il numero non esiste. 2.Scrivere.

Presentazioni simili


Presentazione sul tema: "1.Scrivere una funzione per cercare un numero x in una lista circolare di interi. La funzione deve restituire NULL se il numero non esiste. 2.Scrivere."— Transcript della presentazione:

1 1.Scrivere una funzione per cercare un numero x in una lista circolare di interi. La funzione deve restituire NULL se il numero non esiste. 2.Scrivere una funzione che cancella un nodo da una lista circolare contenente un valore x dato. 3.Scrivere una funzione per concatenare due liste circolari. La funzione dovrà restituire una puntatore allultimo nodo della nuova lista circolare. 4.Scrivere una funzione per fondere in unica lista circolare ordinata due liste circolari ordinate. 5.Scrivere una funzione per invertire una lista circolare NOTA: scrivere sempre pre e post condizione di ogni funzione Esercizi su liste circolari

2 Definizione di lista (elementi interi) struct list { int el; struct list *next; };

3 Esercizio 1 Scrivere una funzione per cercare un numero x in una lista circolare di interi. La funzione deve restituire NULL se il numero non esiste. Pre condizioni: la funzione prende in ingresso un numero x intero e una lista L circolare a valori interi Post condizioni: se x L, la funzione restituisce lelemento di L che codifica x altrimenti restituisce NULL

4 Svolgimento struct list *cerca(struct list *l, int x) { struct list *l2 = l; /* se la lista è vuota, restituisce NULL */ if (l == NULL) return NULL; /* per ogni elemento della lista */ do { if (l2->el == x) return l2; /* elemento successivo */ l2 = l2->next; } while(l2 != l); return NULL; }

5 Esercizio 2 Scrivere una funzione che cancella un nodo da una lista circolare contenente un valore x dato. Pre condizioni: la funzione prende in ingresso un numero x intero e una lista L circolare a valori interi Post condizioni: se x L, la funzione restituisce un puntatore valido alla lista L che codifica x altrimenti restituisce L

6 Svolgimento struct list *cancella(struct list *l, int x) { struct list *l2 = l, *prev = l; /* se la lista è vuota, restituisce NULL */ if (l == NULL) return NULL; /* per ogni elemento della lista */ do { /* elemento successivo */ l2 = l2->next; /* se trova lelemento */ if (l2->el == x) { /* ed è lunico elemento */ if (prev == l2) { free(l2); return NULL; } /* altrimenti salta lelemento da cancellare */ prev->next = l2->next; free(l2); return prev; } prev = l2; } while(l2 != l); return l; }

7 Esercizio 3 Scrivere una funzione per concatenare due liste circolari. La funzione dovrà restituire una puntatore allultimo nodo della nuova lista circolare. Pre condizioni: la funzione prende in ingresso due liste circolari L1 e L2 Post condizioni: La funzione restituisce il puntatore allultimo nodo di L2

8 Svolgimento struct list *concatena(struct list *l1, struct list *l2) { struct list *h1; /* se una delle due liste è vuota, restituisce laltra lista circolare */ if (l1 == NULL) return return l2; if (l2 == NULL) return return l1; h1 = l1->next; l1->next = l2->next; l2->next = h1; return l2; }

9 Esercizio 5 Scrivere una funzione per invertire una lista circolare Pre condizioni: la funzione prende in ingresso una lista circolare L Post condizioni: La funzione restituisce il puntatore allultimo nodo della lista L invertita

10 Svolgimento Due possibili implementazioni: –iterativa –ricorsiva

11 Soluzione ricorsiva Casi base: 1.lista vuota (si restituisce immediatamente NULL) 2.ultimo elemento da invertire Caso ricorsivo sul generico elemento l: –Memorizzare il puntatore allelemento successivo (n = l->next) –Richiedere linversione della parte rimanente della lista (puntata da l->next) –Invertire lelemento n->next = l


Scaricare ppt "1.Scrivere una funzione per cercare un numero x in una lista circolare di interi. La funzione deve restituire NULL se il numero non esiste. 2.Scrivere."

Presentazioni simili


Annunci Google