Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

26
Unità C1 Estendere i linguaggi: i tipi di dato astratti

Transcript of Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Page 1: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Unità C1

Estendere i linguaggi:i tipi di dato astratti

Page 2: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Obiettivi

• Conoscere le principali strutture dati esistenti

• Conoscere ed essere in grado di implementare le operazioni definite sulle strutture dati

• Saper scegliere la struttura dati più adatta alla soluzione di un problema

Page 3: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Insiemi dinamici

• Caratteristica di un insieme dinamico: il numero e la disposizione degli elementi che lo compongono può variare nel corso della sua esistenza

• Elementi dell’insieme: alcuni tipi di insiemi dinamici sono composti da elementi formati da informazioni che li identificano chiave e da dati satellite.

• La chiave è un campo (o un insieme di campi) che consente di identificare in modo univoco un elemento.

• I dati satellite sono le informazioni memorizzate nell’elemento.

Page 4: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Chiavi e dati satelliti

• Un esempio: gestione degli studenti della scuola.

• Ogni singolo elemento rappresenta uno studente.

• La chiave può essere per esempio il numero del libretto scolastico (o il codice fiscale)

• I dati satellite sono tutti i dati che vengono memorizzati per ogni studente: – Cognome

– Nome

– Indirizzo

– Classe frequentata

– …

Page 5: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Chiavi e chiavi artificiali

• Non sempre è possibile individuare una chiave di identificazione degli elementi

• In molti casi si definisce una “chiave artificiale” (es il codice fiscale, il numero di libretto o in alcuni casi un ID (numero intero progressivo assegnato nel momento in cui un elemento viene inserito nell’insieme).

• La chiave può essere utilizzata per ordinare gli elementi in modo crescente o decrescente.

Page 6: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Puntatori

• I puntatori nei linguaggi di programmazione consentono di recuperare un dato conoscendo l’indirizzo di memoria in cui è memorizzato.

• Un puntatore è una variabile contenente un indirizzo di una cella di memoria.

• Un puntatore, quindi, è una variabile che, anziché contenere un valore numerico o una stringa di testo, mantiene l’indirizzo di memoria in cui è memorizzata l’informazione.

Page 7: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Operazioni sugli insiemi

• Le operazioni che si possono effettuare sugli insiemi dinamici si suddividono in:– operazioni di interrogazione

operazioni di sola lettura per recuperare informazioni dall’insieme

– operazioni di modificaconsentono di inserire, cancellare e riordinare gli elementi dell’insieme cambiandone il numero e/o la disposizione

Page 8: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Le principali operazioni

Page 9: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Strutture dati

• Per gestire un insieme dinamico di elementi occorre implementarlo mediante una struttura dati.

• Una struttura dati è composta da nodi, ciascuno dei quali contiene un elemento dell’insieme ed eventuali altre informazioni (puntatori) che servono per la gestione della struttura.

Page 10: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Tipi di strutture dati

• Le strutture dati possono essere suddivise in due grandi famiglie: – lineari

l’insieme degli elementi è organizzato in modo sequenziale.

– non linearinon prevedono che un elemento sia seguito esclusivamente da un altro elemento (Esempio la struttura ad albero del filesystem )

Page 11: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Le strutture fisiche dei dati

• Per implementare le strutture dati, si devono utilizzare le strutture fisiche fornite dai linguaggi che possono avere dimensione statica o dinamica.

• Un array, per esempio, è una struttura di memorizzazione dalla dimensione statica.

• Strutture fisiche dalla dimensione dinamica si possono implementare grazie all’uso dei puntatori.

Page 12: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Strutture dati lineari

• Una struttura dati si dice lineare se i suoi elementi sono organizzati in modo sequenziale, ovvero se logicamente gli stessi sono posizionati uno dopo l’altro.– Pila– Coda– Lista

Page 13: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Pila (stack)

• La pila è una struttura dati di tipo LIFO che garantisce che l’ultimo elemento depositato nella pila sia il primo a essere servito.

• LIFO (Last-In First-Out, “l’ultimo arrivato è il primo ad essere servito”)

• Esempio pila di piatti, pila di libri, di monete

Page 14: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Operazioni sulla pila

• push– consente di inserire un nuovo elemento in testa alla

pila• pop

– permette di estrarre il primo elemento in cima alla pila

• top– consente di leggere il primo elemento in cima alla

pila senza estrarlo da essa• vuota

– restituisce true se la pila è vuota, false in caso contrario

Page 15: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Coda

• La coda è una struttura dati di tipo FIFO che garantisce che il primo elemento inserito sia il primo a essere servito.

• FIFO (First-In First-Out), il primo elemento a entrare è anche il primo a uscire

Page 16: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Operazioni sulla coda

• Le tipiche operazioni che si possono effettuare su una coda sono le seguenti:– enqueue (accodare)

consente di accodare un elemento alla coda

– dequeue (togliere dalla coda)consente invece di eliminare l’elemento che da più tempo è presente nella coda

Page 17: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Lista concatenata

• La lista concatenata è una collezione ordinata di elementi, ciascuno dei quali è concatenato al successivo mediante un riferimento che indica dove andare a prendere il successivo elemento.

• In una lista concatenata non è possibile accedere in modo diretto a un elemento, bensì è necessario scorrere tutti gli elementi fino a raggiungere quello cercato.

• Ogni elemento della lista è contenuto in un nodo, in cui è presente anche un puntatore all’elemento successivo.

• L’ultimo elemento della lista avrà il puntatore nullo, mentre il puntatore al primo nodo si conserva in una variabile opportuna.

Page 18: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Operazioni sulla lista

• Le operazioni principali che si possono effettuare su una lista sono:– inserimento– ricerca– cancellazione

• Esempio di cancellazione:

Page 19: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Strutture dati non lineari

• Una struttura dati non lineare è composta da nodi posti in base a uno schema non sequenziale.

• Nelle strutture dati lineari, se ci troviamo posizionati su un nodo, possiamo decidere al più di andare sul nodo successivo come nelle liste concatenate, o sul nodo precedente come nelle liste concatenate bidirezionali.

• Nelle strutture dati non lineari, invece, partendo da un nodo abbiamo la possibilità di spostarci in più direzioni.

• Una struttura dati di questo genere assomiglia maggiormente a una rete di nodi anziché a una sequenza.

Page 20: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Un esempio: albero genealogico

Page 21: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Strutture non lineari: grafo

• Un grafo è una struttura dati non lineare composta da nodi e archi che li connettono.

• Esistono due principali categorie di grafi:– grafi orientati;– grafi non orientati.

Page 22: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Grafo orientato

• In un grafo orientato i nodi sono detti vertici e gli archi spigoli.

• Gli spigoli che connettono i vertici tra loro hanno una direzione e per definirla si utilizza una freccia.

• In un grafo orientato è possibile avere cappi.

• Un cappio è uno spigolo che inizia e termina sullo stesso vertice.

• Uno spigolo che esce da un vertice A o che entra in un vertice B si dice, rispettivamente, incidente da A o incidente a B.

• Il numero di spigoli uscenti da un vertice si chiama grado uscente.

• Il numero di spigoli entranti in un vertice si chiama invece grado entrante.

• Il grado di un vertice è il suo grado entrante più il suo grado uscente.

Page 23: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Grado, cammino

• In un grafo (orientato e non) il percorso per andare da un nodo a un altro è chiamato cammino e la sua lunghezza è pari al numero di archi attraversati.

• Un cammino si dice semplice se tutti i nodi della sequenza sono distinti tra loro.

• In un grafo orientato non è detto che esista un cammino per andare da un nodo a un altro, in quanto il percorso è condizionato dalla direzione degli spigoli.

• Se da un nodo A è possibile andare a un nodo B, si dice anche che B è raggiungibile da A tramite un determinato cammino c.

• Il grado di un vertice di un grafo non orientato è semplicemente il numero di archi incidenti su di esso.

• Un grafo non orientato si dice connesso se ogni coppia di nodi è collegata con un cammino.

• Un grafo non orientato, connesso e aciclico è detto albero libero, o più semplicemente un albero.

Page 24: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Albero

• Un albero è un grafo non orientato, connesso e aciclico.

• La rappresentazione grafica è simile a un albero con la radice in alto e le foglie in basso

• Un albero è una struttura dati gerarchica composta da nodi padri e nodi figli collegati da archi (rami).

• Un nodo figlio è correlato a uno e un solo nodo padre.

• Il nodo radice è il nodo da cui parte la struttura ad albero e che non possiede un nodo padre.

• Un nodo foglia non possiede nodi figli.• La profondità di un nodo è la distanza tra esso

ed il nodo radice.• La profondità maggiore tra tutti i nodi

dell’albero è l’altezza dell’albero.• Il grado di un nodo è il numero di figli che esso

possiede.

Page 25: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Albero (altre caratteristiche)

• Un antenato di un nodo x di un albero è qualunque nodo y che si trovi sull’unico cammino che porta dalla radice a x

• x è un discendente di y• Se i nodi di un albero

possono avere al massimo n figli, si parla di alberi n-ari

• Un albero si dice completo se i nodi foglia hanno tutti la stessa altezza e ogni altro nodo ha il grado pari al grado massimo.

Page 26: Unit à C1 Estendere i linguaggi: i tipi di dato astratti.

Albero binario

• Un albero binario è un albero i cui nodi possono avere al più due nodi figli, denominati figlio destro e figlio sinistro.

• Un albero binario può essere definito anche in modo ricorsivo:– non contiene alcun nodo;– oppure contiene un nodo radice, un albero binario

detto sottoalbero sinistro (eventualmente vuoto) e un albero binario chiamato sottoalbero destro (eventualmente vuoto).

• Negli alberi binari esistono 3 tipi di ricerca:– PreOrdine

visita prima il nodo padre, poi il sottoalbero sinistro e infine quello destro

– PostOrdine visita prima il sottoalbero sinistro, poi quello destro e infine il nodo padre

– InOrdine visita prima il sottoalbero sinistro, poi il nodo padre e infine il sottoalbero destro.