1 Strutture Dinamiche Corso di Informatica A Vito Perrone.

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

INFORMATICA Algoritmi fondamentali
Uso avanzato di C.
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.
Introduzione al linguaggio C Dr. Francesco Fabozzi Corso di Informatica.
Grafi Algoritmi e Strutture Dati. Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 2 Copyright © The McGraw.
Lez. 91 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Alberi di ricerca.
Dallalgoritmo minimax allalgoritmo alfa-beta. MINIMAX int minimax(stato, livello) { if((livello == max_livello) || condizione_uscita(stato)) { CAMMINO.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti lineari.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti ottimi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti lineari.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
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.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e Puntatori Marco D. Santambrogio – Ver. aggiornata al 18 Marzo 2013.
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.
Approfondimento delle classi
memoria gestita staticamente:
Strutture di controllo in C -- Flow Chart --
Esercizi di riepilogo sul linguaggio C: file, puntatori, liste
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Introduzione alla Ricorsione
Le liste dinamiche La ricorsione
Le funzioni.
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 =
15 maggio 2002 Avvisi: Ultima lezione: mercoledì 29 maggio II Esonero: mercoledì 5 giugno, ora da stabilire.
Corso di informatica Athena – Periti Informatici
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
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
C. Gaibisso Programmazione di Calcolatori Lezione XXII La struttura di dati lista di variabili strutturate Programmazione di Calcolatori: le liste di.
C. Gaibisso Programmazione di Calcolatori Lezione XVI Allocazione dinamica della memoria Programmazione di Calcolatori: allocazione dinamica della memoria.
Memoria Dinamica.
Esercizi Liste.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Grafi Rappresentazione mediante liste di adiacenza:
Complessità di un algoritmo
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 5 Le strutture informative Corso di Informatica 2 a.a. 2003/04 Lezione 5.
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
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.
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.
Fondamenti di Informatica
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Strutture dati di tipo astratto 19 Strutture dati,
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 Strutture Dinamiche Corso di Informatica A Vito Perrone

Copyright © The McGraw-Hill Companies, srl 2 Strutture Dinamiche Informatica A – V. Perrone Indice Allocazione e de-allocazione di memoria Liste e loro gestione

Copyright © The McGraw-Hill Companies, srl 3 Strutture Dinamiche Informatica A – V. Perrone Allocazione e cancellazione di memoria 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 free(P) –Rilascia lo spazio di memoria puntato da P

Copyright © The McGraw-Hill Companies, srl 4 Strutture Dinamiche Informatica A – V. Perrone … Proc ( …).. int*Punt1; int**Punt2; … Record di attivazione di Proc StackHeap 5 3 Punt1 Punt2... Stack e Heap

Copyright © The McGraw-Hill Companies, srl 5 Strutture Dinamiche Informatica A – V. Perrone Rischi della gestione dinamica della memoria produzione di garbage : –P = malloc(sizeof(TipoDato)); –P = Q; riferimenti fluttuanti (dangling references): –P = Q; –free(Q);

Copyright © The McGraw-Hill Companies, srl 6 Strutture Dinamiche Informatica A – V. Perrone 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

Copyright © The McGraw-Hill Companies, srl 7 Strutture Dinamiche Informatica A – V. Perrone Invece di dichiarare il tipo lista, si dichiarano i suoi elementi: struct EL { TipoElementoInfo; struct EL*Prox; }; typedef struct ELElemLista; typedef ElemLista*ListaDiElem; Sintassi un po nuova: –la prima dichiarazione del tipo strutturato struct EL definisce un primo campo, Info, del tipo TipoElemento e permette di dichiarare il campo Prox come puntatore al tipo strutturato che si sta definendo; –la seconda dichiarazione utilizza typedef per rinominare il tipo struct EL come ElemLista ; –la terza dichiarazione definisce il tipo ListaDiElem come puntatore al tipo ElemLista. Dichiarazione lista dinamica (1)

Copyright © The McGraw-Hill Companies, srl 8 Strutture Dinamiche Informatica A – V. Perrone Dichiarazione standard; mette in evidenza il tipo della lista: ListaDiElemLista1, Lista2, Lista3; Dichiarazioni abbreviate: ElemLista*Lista1; se non interessa mettere in evidenza il tipo della lista, ma si vuole indicare esplicitamente il tipo dei suoi elementi. struct EL*Lista1 può sostituire entrambe le typedef se non è necessario nominare esplicitamente né il tipo della lista né il tipo dei suoi elementi. Dichiarazione lista dinamica (2)

Copyright © The McGraw-Hill Companies, srl 9 Strutture Dinamiche Informatica A – V. Perrone Operazioni sulle liste: Inizializzazione (1) Assegna il valore NULL alla variabile testa della lista: loperazione: Inizializza (Lista) : Lista Se però vogliamo eseguire loperazione in maniera parametrica: …

Copyright © The McGraw-Hill Companies, srl 10 Strutture Dinamiche Informatica A – V. Perrone #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

Copyright © The McGraw-Hill Companies, srl 11 Strutture Dinamiche Informatica A – V. Perrone #include ElemLista*Lista1; void Inizializza(void) { Lista1 = NULL; } Inizializzazione tramite accesso alla variabile globale Si raccomanda di evitare questa prassi! Inizializzazione (3) senza parametro

Copyright © The McGraw-Hill Companies, srl 12 Strutture Dinamiche Informatica A – V. Perrone 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

Copyright © The McGraw-Hill Companies, srl 13 Strutture Dinamiche Informatica A – V. Perrone boolean Ricerca (ListaDiElem Lista, TipoElemento 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

Copyright © The McGraw-Hill Companies, srl 14 Strutture Dinamiche Informatica A – V. Perrone boolean Ricerca (ListaDiElem Lista, TipoElemento 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

Copyright © The McGraw-Hill Companies, srl 15 Strutture Dinamiche Informatica A – V. Perrone TipoElementoTestaLista (ListaDiElem Lista) /* È applicabile solo a liste non vuote. Se la lista è vuota segnala l'errore in modo opportuno; in caso contrario produce come risultato il valore del campo Info del primo elemento della lista */ ListaDiElemCodaLista (ListaDiElem Lista) /*Produce come risultato un puntatore alla sottolista ottenuta da Lista cancellandone il primo elemento. Essa non deve modificare il parametro originario. Anche questa assume l'ipotesi che il parametro passatole sia una lista non vuota */ Lista e1e2en Ultimo elemento CodaLista Estrazione della testa e della coda di una lista

Copyright © The McGraw-Hill Companies, srl 16 Strutture Dinamiche Informatica A – V. Perrone Inserimento di un nuovo elemento in testa alla lista (1) Punt = malloc(sizeof(ElemLista)); Punt–>Info = Elem; Lista e1e2en Punt Lista e1e2en Punt Elem

Copyright © The McGraw-Hill Companies, srl 17 Strutture Dinamiche Informatica A – V. Perrone 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)

Copyright © The McGraw-Hill Companies, srl 18 Strutture Dinamiche Informatica A – V. Perrone voidInsercisciInTesta (ListaDiElem *Lista, TipoElemento 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)

Copyright © The McGraw-Hill Companies, srl 19 Strutture Dinamiche Informatica A – V. Perrone voidInserisciInCoda (ListaDiElem *Lista, TipoElemento 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

Copyright © The McGraw-Hill Companies, srl 20 Strutture Dinamiche Informatica A – V. Perrone e1e2en-1en Lista1 Lista*1Lista*2Lista*3Lista*nLista*n+1 e1e2en-1en Lista1 Lista*1Lista*2Lista*3 Lista*n+1 Punt Elem e1e2en-1en Lista1 Lista*1Lista*2Lista*3 Lista*n+1 Punt Elem

Copyright © The McGraw-Hill Companies, srl 21 Strutture Dinamiche Informatica A – V. Perrone Riassumendo Strutture dati dinamiche = pseudotipi di dato astratti dinamici Realizzate mediante puntatori Puntatori: struttura di basso livello ---> a rischio Raccomandazione: usare i puntatori solo allinterno delle operazioni astratte associate alle relative strutture Liste: primo e fondamentale -ma non unico!!- esempio di struttura dinamica Altri più complessi e potenti verranno visti in corsi successivi Una prima valutazione -a spanne- dellefficienza della struttura dinamica lista rispetto allarray: –Si evita lo spreco di memoria/rischio di overflow (obiettivo iniziale) –A prezzo di un -lieve- aumento dovuto ai puntatori –Da un punto di vista del tempo necessario allesecuzione degli algoritmi: pro e contro (inserire in testa meglio, inserire in coda peggio, … però la ricerca in una lista ordinata non si può fare con algoritmi del tipo della ricerca in un vocabolario … –Il seguito alle prossime puntate (corsi).