Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A. 2008-2009 CDL in Ingegneria Elettronica - A.A. 2008-2009 13. Strutture dati dinamiche.

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

INFORMATICA Algoritmi fondamentali
Uso avanzato di C.
Puntatori in C e C++.
Tipi di dato astratti Lista, Pila, Coda, Albero.
Estendere i linguaggi: i tipi di dato astratti
Strutture dati lineari
Procedure e funzioni In linguaggio C.
Fondamenti di Informatica CDL in Ingegneria Meccanica - A.A CDL in Ingegneria Meccanica - A.A Tipi di dati Ing. Simona Colucci.
Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A Tipi di dati Ing. Simona Colucci.
Fondamenti di Informatica CDL in Ingegneria Gestionale (B)- A.A CDL in Ingegneria Gestionale (B)- A.A Programmazione Ricorsiva.
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 Funzioni e procedure Ing.
UD 3: “Le Liste” UD 4: “Pile e Code” UD 5: “Alberi e grafi”
Dallalgoritmo minimax allalgoritmo alfa-beta. MINIMAX int minimax(stato, livello) { if((livello == max_livello) || condizione_uscita(stato)) { CAMMINO.
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.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Liste.
Esercizi su alberi binari
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
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.
Allocazione dinamica della memoria
Laboratorio di Linguaggi lezione VI: puntatori 2/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi lezione VIII Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Laboratorio di Linguaggi lezione V Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione VII: puntatori 3/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi P R I M O C O M P I T I N O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
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.
memoria gestita staticamente:
1 Strutture Dinamiche Corso di Informatica A Vito Perrone.
Esercizi di riepilogo sul linguaggio C: file, puntatori, liste
Le liste dinamiche La ricorsione
La Programmazione Ricorsiva
Le funzioni a tempo di esecuzione
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.
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.
15 maggio 2002 Avvisi: Ultima lezione: mercoledì 29 maggio II Esonero: mercoledì 5 giugno, ora da stabilire.
Corso di informatica Athena – Periti Informatici
Le strutture dati dinamiche
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Unità Didattica 3 Linguaggio C
Laboratorio di Linguaggi lezione VII: variabili Globali e Locali Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali.
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.
Memoria Dinamica.
Esercizi Liste.
Esercizi su File e Liste
2000 Prentice Hall, Inc. All rights reserved. Attivazione di funzioni La chiamata/attivazione di funzione viene indicata citando il nome della funzione.
Grafi Rappresentazione mediante liste di adiacenza:
Complessità di un algoritmo
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 5 Le strutture informative Corso di Informatica 2 a.a. 2003/04 Lezione 5.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 7 – Array.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Allievi Elettrici - AA Le funzioni ricorsive in C
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
Algoritmi e Strutture Dati Strutture Dati Elementari.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 8 Oggetti statici e dinamici. Classi annidate. Costruttori/distruttori.
Relazione sulle strutture dati Svolta da: Buccella Simone Strutture di dati Aree di memoria Puntatore numericibooleani alfabetici Statici dinamici Puntatori.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
ALLOCAZIONE STATICA: LIMITI Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente –la loro esistenza deve essere prevista e.
Il linguaggio C Puntatori e dintorni.
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Strutture dati di tipo astratto 19 Strutture dati,
10. Programmazione Ricorsiva Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
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:

Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche Ing. Simona Colucci

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Indice Allocazione dinamica vs statica Allocazione e de-allocazione di memoria Liste e loro gestione

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Allocazione dinamica della memoria Gestione dinamica della memoria per memorizzare una quantità variabile di dati in funzione di esigenze note solo durante lesecuzione del programma e modificabili durante lesecuzione Consente di : –Aggiungere un nuovo elemento nellarea dati di un programma in fase di esecuzione –Eliminare lelemento di memorizzazione in fase di cancellazione del dato stesso Necessita di un riferimento ai nuovi elementi di memorizzazione che non può avvenire mediante identificatori: –Uso di puntatori –Creazione di un nuovo elemento e restituzione di un riferimento al dato stesso

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Allocazione e cancellazione di memoria Allocazione : malloc (sizeof (TipoDato)); –Crea in memoria una variabile di tipo TipoDato, e restituisce come risultato lindirizzo della variabile creata –Se P è una variabile di tipo puntatore a TipoDato, listruzione: P = malloc(sizeof(TipoDato)); assegna lindirizzo restituito dalla funzione malloc a P Cancellazione : free(P) –Rilascia lo spazio di memoria puntato da P Le due funzioni sono in

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Record di attivazione di Proc Stack Heap 5 3 Punt1 Punt2... Gestione della memoria della macchina astratta Stack: pila per la gestione delle variabili dichiarate (LIFO) Heap: mucchio per le variabili create dinamicamente (allocazione a deallocazione gestite direttamente dal programmatore)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Rischi della gestione dinamica della memoria Garbage production : –P = malloc(sizeof(TipoDato)); –P = Q; Dangling references: –P = Q; –free(Q);

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Costruzione e gestione della struttura dinamica(pseudotipo astratto) lista mediante puntatori: Lista e1e2en Ultimo elemento Lista dinamica Puntatore alla testa di lista testa di listacoda di lista Elemento 1 della listaPuntatore a elemento 2Puntatore NULL

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Invece di dichiarare il tipo lista, si dichiarano i suoi elementi : typedef struct{ int Info; ElemLista *Prox; }ElemLista; typedef ElemLista*ListaDiElem Alternative: ElemLista *Lista1; ListaDiElemLista1, Lista2, Lista3; Dichiarazione lista dinamica

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Operazioni sulle liste: Inizializzazione (1) Assegna il valore NULL alla variabile testa della lista: Effettua loperazione: Inizializza (Lista) : Lista Se però vogliamo eseguire loperazione in maniera parametrica: …

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A #include voidInizializza (ListaDiElem *Lista) /* Lista è la variabile locale che punta alla "testa di lista". La funzione assegna alla testa di lista" il valore NULL corrispondente al valore di lista vuota */ { *Lista = NULL; } Lista1 Lista Inizializzazione (2) Listruzione Inizializza(&Lista1); produce: Al termine dellesecuzione, il parametro formale Lista viene eliminato

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A booleanListaVuota (ListaDiElem Lista) /* Produce il valore true se la lista passata come parametro è vuota, false in caso contrario, a Lista viene passato il valore contenuto nella variabile testa di lista. Lista punta pertanto al primo elemento della lista considerata */ { if (Lista == NULL) return true; else return false; } La chiamata sarà: ListaVuota (Lista1) Controllo di lista vuota

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A boolean Ricerca (ListaDiElem Lista, int ElemCercato) { ElemLista*Cursore; if (Lista != NULL) { Cursore = Lista;/* La lista non è vuota */ while (Cursore != NULL) { if (Cursore–>Info == ElemCercato) return true; Cursore = Cursore–>Prox; /* In questa maniera Cursore viene fatto puntare all'elemento successivo della lista */ } return false; } Ricerca di un elemento nella lista

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A boolean Ricerca (ListaDiElem Lista, int ElemCercato) { if (Lista == NULL) return false; else if (Lista–>Info == ElemCercato) return true; else return Ricerca(Lista–>Prox, ElemCercato); } Ricerca di un elemento nella lista, versione ricorsiva

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Inserimento di un nuovo elemento in testa alla lista (1) in testa alla lista (1) Punt = malloc(sizeof(ElemLista)); Punt–>Info = Elem; Lista e1e2en Punt Lista e1e2en Punt Elem

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Infine si collega il nuovo elemento al precedente primo elemento della lista e la testa della lista viene fatta puntare al nuovo elemento: Lista e1e2en Punt Elem Inserimento di un nuovo elemento in testa alla lista (2) in testa alla lista (2)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A voidInsercisciInTesta (ListaDiElem *Lista, int Elem) { ElemLista*Punt; /* Allocazione dello spazio necessario per la memorizzazione del nuovo elemento e inizializzazione del puntatore */ Punt = malloc(sizeof(ElemLista)); Punt–>Info = Elem; Punt–>Prox = *Lista; *Lista = Punt; } Lista1 e1e2en Lista Punt Elem Inserimento di un nuovo elemento in testa alla lista (3) in testa alla lista (3)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A voidInserisciInCoda (ListaDiElem *Lista, int Elem); { ElemLista*Punt; if (ListaVuota (*Lista)) { Punt = malloc(sizeof(ElemLista)); Punt–>Prox = NULL; Punt–>Info = Elem; *Lista = Punt; } else InserisciIncoda (&((*Lista)–>Prox), Elem); } Inserimento di un nuovo elemento in coda alla lista(1) in coda alla lista(1)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A e1e2en-1en Lista1 Lista*1Lista*2Lista*3Lista*nLista*n+1 e1e2en-1en Lista1 Lista*1Lista*2Lista*3 Lista*n+1 Punt Elem Inserimento di un nuovo elemento in coda alla lista(2) in coda alla lista(2)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A Inserimento di un nuovo elemento in coda alla lista(3) e1e2en-1en Lista1 Lista*1Lista*2Lista*3 Lista*n+1 Punt Elem e1e2en-1en Lista1 Lista*1Lista*2Lista*3 Lista*n+1 Punt Elem