Fondamenti di Informatica A - Massimo Bertozzi LE RAPPRESENTAZIONI CONCATENATE.

Slides:



Advertisements
Presentazioni simili
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Advertisements

1 Il linguaggio C Puntatori e dintorni. 2 Puntatori : idea di base In C è possibile conoscere e denotare l’indirizzo della cella di memoria in cui è memorizzata.
CORSO DI PROGRAMMAZIONE II
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Strutture dati di tipo astratto 19 Strutture dati,
Fondamenti di Informatica A - Massimo Bertozzi ALBERI E ALBERI BINARI DI RICERCA (BST)
Fondamenti di Informatica A - Massimo Bertozzi ARRAY E STRINGHE Curiouser and curiouser! Alice's Adventures in Wonderland, Lewis Carrol.
Fondamenti di Informatica A - Massimo Bertozzi LE FUNZIONI.
Fondamenti di Informatica A - Massimo Bertozzi I PUNTATORI.
1 ELEMENTI DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
.  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione.
Process synchronization
Process synchronization
Rileaborato da M. Lenzerini - Basi di dati
Progettare algoritmi veloci usando strutture dati efficienti
Inserzione e Cancellazione
Branch and Bound Lezione n°14 Prof.ssa Rossella Petreschi
Progettare algoritmi veloci usando strutture dati efficienti
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Process synchronization
Il linguaggio C Strutture Moreno Marzolla
Il Binding Nicolò Sordoni.
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
File heap.
File con indice (sparso)
Drupal tipi di contenuto
B-alberi e alberi autoaggiustanti
Le postcondizioni specificano l’output della funzione.
Strutture classi e oggetti
Organizzazione fisica
I FILES AD ACCESSO SEQUENZIALE
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
Strutture informative
Recap su: array e puntatori
Lezione n°4 Prof.ssa Rossella Petreschi
Vettori dinamici Definiremo la classe vector.
K4 è planare? E K3,3 e K5 sono planari? Sì!
Algoritmi e Strutture Dati
OBJECT ORIENTED DATABASE
Algoritmi e Strutture Dati
Programmazione e Laboratorio di Programmazione
Lezione n°6 Prof.ssa Rossella Petreschi
Introduzione agli Algoritmi e alle Strutture Dati
© 2007 SEI-Società Editrice Internazionale, Apogeo
APPUNTI SUL LINGUAGGIO C
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
APPUNTI SUL LINGUAGGIO C
Progettare algoritmi veloci usando strutture dati efficienti
* 07/16/96 Sez. 2: Ordinamento La consultazione di banche dati è sempre più cruciale in tutte le applicazioni dell’Informatica. Se vogliamo consultare.
APPUNTI SUL LINGUAGGIO C Implementazioni di Liste Concatenate
Appunti Fonte: M. Addomine D. Pons - Informatica - Zanichelli
APPUNTI SUL LINGUAGGIO C Esercizi su File e Alberi Binari
Le stringhe in C++ Laboratorio 26 Aprile Dott. Serena Villata
Algoritmi e Strutture Dati
Lucidi della Pof.ssa Pazienza
APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C Allocazione dinamica della memoria
Esercizio Dato un albero binario, definiamo altezza minimale di un nodo v la minima distanza di v da una delle foglie del suo sottoalbero, definiamo invece.
APPUNTI SUL LINGUAGGIO C
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Selezione e Proiezione
Grafi e problem solving
Lezione n°7 Splay-Trees e Heaps Prof.ssa Rossella Petreschi
concetti ed applicazioni
Algoritmi e Strutture Dati
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Array e Stringhe Linguaggio C.
Array (vettori) In linguaggio C / C++.
HeapSort Stesso approccio incrementale del selectionSort Tipo di dato
Transcript della presentazione:

Fondamenti di Informatica A - Massimo Bertozzi LE RAPPRESENTAZIONI CONCATENATE

Fondamenti di Informatica A - Massimo Bertozzi Array e prestazioni ✗ Un problema frequente del programmatore è la gestione di dati ordinati: ✗ Le operazioni da gestire sono: 1. ricerca elemento 2. inserzione nuovo elemento 3. cancellazione elemento ✗ Per i punti 2 e 3 l'utilizzo semplice di array porta a complessità computazionali di classe O(n) -> inefficiente

Fondamenti di Informatica A - Massimo Bertozzi Distribuzione in memoria dei dati ✗ Il problema fondamentale degli array è che i dati sono memorizzati sequenzialmente in memoria. ✗ ogni inserzione/cancellazione di un dato quando si desidera mantenere l'ordine necessita di uno spostamento dei dati ✗ Soluzione: dati non memorizzati sequenzialmente -> costrutti struct o class

Fondamenti di Informatica A - Massimo Bertozzi Preambolo: le strutture  In C e C++ è possibile aggregare i dati scalari usando i tipi di dato composito:  struct impiegato{  char *nome;  char *cognome;  int matricola;  char posizione;  }; // esistono altri modi di definire una struttura ✗ struct impiegato rappresenta un tipo di dato definito dal programmatore.

Fondamenti di Informatica A - Massimo Bertozzi Definizione e accesso ai dati ✗ La definizione di un nuovo tipo di dato permette di definire variabili relative a quel tipo:  struct impiegato a, b[100], *c; ✗ L'accesso ai singoli componenti avviene tramite gli operatori. e ->  a.matricola=123;  b[10].cognome=new char[15];  c->matricola=a.matricola;  cout matricola;  cout << (*c).matricola; // sconsigliato  struct impiegato d={“Mario”, “Rossi”, 03456, 'A'};

Fondamenti di Informatica A - Massimo Bertozzi Copia dati tra variabili struct ✗ La copia di dati tra variabili struct necessita qualche attenzione:  struct impiegato a, b;... altro codice...  b=a; // copio elementi struct  delete[] a.nome; // elimino dati a e b! ✗ Per evitare questo problema:  b=a;  b.nome=new char[strlen(a.nome)+1];  strcpy(a.nome, b.nome); // etc.

Fondamenti di Informatica A - Massimo Bertozzi Strutture innestate ✗ È possibile creare strutture in cui uno o piú elementi sono a loro volta strutture:  struct azienda{  struct impiegato *impiegati;  struct operaio *operai;  struct edificio b; } ✗ Le strutture non possono contenere istanze di se stesse

Fondamenti di Informatica A - Massimo Bertozzi Strutture autoreferenzianti ✗ Quando una struttura contiene uno o piú puntatori a se stessa si dice che si autoreferenzia:  struct elenco{  char nome[100];  struct elenco *prossimo;  }; ✗ Attenzione: non è possibile dichiarare puntatori a strutture non ancora definite!

Fondamenti di Informatica A - Massimo Bertozzi Rappresentazioni concatenate ✗ L'utilizzo di strutture autoreferenzianti permette la creazione di una famiglia di strutture dati che prendono il nome generale di rappresentazioni concatenate: ✗ liste o catene ✗ alberi ✗ grafi

Fondamenti di Informatica A - Massimo Bertozzi Bibliografia ✗ Un buon libro sulle rappresentazioni concatenate e in generale su algoritmi di ordinamento, ricerca, etc.:  Sedgewick, Algorithms in C++ (Parts 1-4), Addison- Wesley, 1999; ✗ Per chi vuole approfondire:  Donald E. Knuth, The Art of Computer Programming, Volumi 1-3, Addison-Wesley;

Fondamenti di Informatica A - Massimo Bertozzi Le liste ✗ Si definisce lista un insieme (eventualmente vuoto) di strutture dati (nodi o elementi) contenti: ✗ i dati ✗ l'indirizzo dell'elemento successivo ✗ La testa della lista è l'indirizzo che permette l'accesso al primo elemento

Fondamenti di Informatica A - Massimo Bertozzi Liste e array ✗ Al pari degli array le liste consentono la manipolazione di grandi quantità di dati. ✗ A differenza degli array questi dati non sono memorizzati consecutivamente in memoria: 123* Testa 16*0* *1986*123*0* 1986*

Fondamenti di Informatica A - Massimo Bertozzi Metodi ✗ Metodi: ✗ inserimento elemento; ✗ lettura elemento di indice k; ✗ eliminazione elemento di indice k; ✗ chiave di un elemento; ✗...

Fondamenti di Informatica A - Massimo Bertozzi Inserimento o cancellazione di nodi ✗ La non sequenzialità dei dati in memoria facilita estremamente la cancellazione e l'inserimento di dati [O(1)] ✗ Il recupero dei dati richiede però lo scorrimento della lista [O(n)] 16*0*1986*

Fondamenti di Informatica A - Massimo Bertozzi Le catene ✗ L'implementazione dei metodi delle liste è molto semplice se si sfrutta la ricorsione, in questo caso è pratico che l'ultimo elemento punti a NULL -> catena 123* Testa 16*0* NULL

Fondamenti di Informatica A - Massimo Bertozzi Altri tipi di liste ✗ Il concetto di lista può essere esteso a piacere: ✗ liste composite ✗ liste doppiamente concatenate ✗ liste circolari