La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Fondamenti di Informatica A - Massimo Bertozzi LE RAPPRESENTAZIONI CONCATENATE.

Presentazioni simili


Presentazione sul tema: "Fondamenti di Informatica A - Massimo Bertozzi LE RAPPRESENTAZIONI CONCATENATE."— Transcript della presentazione:

1 Fondamenti di Informatica A - Massimo Bertozzi LE RAPPRESENTAZIONI CONCATENATE

2 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

3 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

4 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.

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

6 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.

7 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

8 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!

9 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

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

11 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

12 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*

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

14 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*

15 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

16 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


Scaricare ppt "Fondamenti di Informatica A - Massimo Bertozzi LE RAPPRESENTAZIONI CONCATENATE."

Presentazioni simili


Annunci Google