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.

Slides:



Advertisements
Presentazioni simili
Andrea Zandatutoraggio strutture dati STRUTTURE DATI e LABORATORIO II ESERCITAZIONE N°14 albero di ricerca binario.
Advertisements

Strutture dati per insiemi disgiunti
1 La Standard Template Library vettori, liste, mappe, …. find, replace, reverse, sort, …. puntatori intelligenti La libreria standard STL e una libreria.
Tipi di dato astratti Lista, Pila, Coda, Albero.
Strutture dati lineari
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche.
Lez. 91 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Alberi di ricerca.
Strutture dati elementari
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Liste.
STRUTTURE DATI e LABORATORIO II ESERCITAZIONE N°13 Heap massimo.
Esercizi su alberi binari
Tail recursion: esempio
Alberi binari Definizione della struttura dati: struct tree { };
Esercizi su alberi binari di ricerca
Esercizi su strutture dinamiche Fondamenti di Programmazione Canale AD a.a. 2009/2010.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di Programmazione a.a.2009/2010 Prof.ssa Chiara Petrioli Corso.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Corso di Programmazione 1 a.a.2007/2008 Prof.ssa Chiara Petrioli Corso di Laurea.
Interrogazioni su un albero binario di ricerca Search(S,k) – dato un insieme S ed un valore chiave k restituisce un puntatore x ad un elemento in S tale.
CORSO DI PROGRAMMAZIONE II
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Esercizi su pile Scrivere una funzione che restituisca una nuova pila che contiene i valori di una pila in ingresso in ordine inverso. La pila originale.
Esercizi su code Date due code in ingresso a valori interi in ordine crescente, scrivere una funzione che restituisca una terza coda che contenga i valori.
Esercizi su alberi binari
Esercizi di riepilogo sul linguaggio C: file, puntatori, liste
Sorting: MERGESORT Vogliamo ordinare lista (a 1,…,a n ). 1.Dividi lista in 2 sottoliste aventi (quasi) la stessa dimensione: (a 1,a 3,a 5,…) e (a 2,a 4,…),
1 ListaDiElem Cancella( ListaDiElem lista, TipoElemento elem ) { ListaDiElem puntTemp; if( ! ListaVuota(lista) ) if( lista–>info == elem ) { puntTemp =
2000 Prentice Hall, Inc. All rights reserved. Capitolo 12 (Deitel) Le strutture dati dinamiche Sommario Introduzione Allocazione dinamica.
Strutture dati per insiemi disgiunti
15 maggio 2002 Avvisi: Ultima lezione: mercoledì 29 maggio II Esonero: mercoledì 5 giugno, ora da stabilire.
Corso di informatica Athena – Periti Informatici
Programmazione di Calcolatori
C. Gaibisso Programmazione di Calcolatori Lezione XXII La struttura di dati lista di variabili strutturate Programmazione di Calcolatori: le liste di.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Corso di Programmazione 1 a.a.2007/2008 Prof.ssa Chiara Petrioli Corso di Laurea.
Esercizi su File.
Esercizi Liste.
Esercizi su File e Liste
Università degli Studi di BresciaA.A. 2012/2013 Fondamenti di Programmazione Docente: Alessandro SaettiA.A. 2012/2013 Università degli Studi di Brescia.
Grafi Rappresentazione mediante liste di adiacenza:
Tail recursion: esempio
Esercizi La distanza di hamming tra due interi x e y si definisce come il numero di posizioni nella rappresentazione binaria di x e y aventi bit differenti.
Esercizi su alberi binari di ricerca
Alberi binari Definizione della struttura dati: struct tree { };
1 Esempi domande di esame. 2 Dato il seguente programma #include int main(){ int *p,j=9,i=5; p=&j; *p=i; printf("%d %d %d\n", i,j,*p); scanf("%d",p);/*
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 2 La ricorsione Corso di Informatica 2 a.a. 2003/04 Lezione 2.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 5 Le strutture informative Corso di Informatica 2 a.a. 2003/04 Lezione 5.
Esercitazioni su liste
alberi completamente sbilanciati
1 Un esempio con iteratore: le liste ordinate di interi.
Struttura di una lista legata Una lista legata è una variabile strutturata in cui ogni elemento mantiene l’indirizzo (mediante un puntatore) dell’elemento.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Esercizio Si legga una sequenza di numeri interi da tastiera (terminatore: 0), quindi: Creare lista L1 con inserimento in testa; cons Creare lista L2 con.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Algoritmi e Strutture Dati Strutture Dati Elementari.
Prog2 a.a. 2001/ Albero binario di ricerca Un albero binario di ricerca é un albero binario in cui ogni nodo ha un’etichetta.
Liste di Interi Esercitazione. IntList Lista di interi Problema tipico: memorizzare una sequenza di valori [6,0,9,3….9] Vediamo un tipo di dato utile.
Compitino del 2004 Alberi Generici. Idea Si vuole un tipo di dato astratto che definisca una struttura ad albero in cui nodi e foglie hanno associato.
Liste Concatenate 11 Aprile E’ una delle strutture dati fondamentali in tutti i linguaggi di programmazione di alto livello Una Lista Concatenata.
Liste di Interi Esercitazione. IntList Lista di interi Una lista è una disposizione ordinata di elementi ( non in modo crescente-descrescente, ma per.
Fondamenti di Informatica
1 Un esempio con iteratore: le liste ordinate di interi.
APPUNTI SUL LINGUAGGIO C
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Esercizi su Alberi.
13. Strutture dati dinamiche Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
1 MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche classe 4° INDUSTRIALE INFORMATICA Focus on.
Transcript della presentazione:

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

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

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

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; }

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

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; }

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

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; }

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

Svolgimento Due possibili implementazioni: –iterativa –ricorsiva

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