Strutture dati

41
Strutture dati Arianna Guidolin Strutture Array Liste Pile Code Alberi Organizzazione nella memoria Puntatori Strutture statiche e dinamiche Memorizzazione delle strutture Array Liste Pile e code Alberi binari Creazione di tipi di dati Strutture dati J. Glenn Brookshear, Computer Science: An Overview Capitolo 8: Data Abstractions Arianna Guidolin Universit` a degli Studi di Trento 4 maggio 2012 Arianna Guidolin (Universit` a degli Studi di Trento) Strutture dati 4 maggio 2012 1 / 35

description

 

Transcript of Strutture dati

Page 1: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Strutture datiJ. Glenn Brookshear, Computer Science: An Overview

Capitolo 8: Data Abstractions

Arianna Guidolin

Universita degli Studi di Trento

4 maggio 2012

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 1 / 35

Page 2: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Array

Si chiamano array le strutture di dati organizzate come vettori omatrici.

Array che contengono dati dello stesso tipo si dicono omogenei,mentre array che contengono dati di diverso tipo si dicono eterogenei

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 1 / 35

Page 3: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Liste

Una lista e una collezione di dati organizzati sequenzialmente

L’inizio di una lista si chiama testa, la fine coda

Le operazioni che si possono fare su una lista sono:

rimuovere elementi

aggiungere elementi

controllare quali elementi sono presenti

cambiare l’ordine degli elementi

cercare un determinato elemento

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 2 / 35

Page 4: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Esempi di liste

Mario ← testa

Giovanni

Francesca

Lucia ← coda

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 3 / 35

Page 5: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Esempi di liste

De Nicola ←coda

Einaudi

Gronchi

Segni

Saragat

Leone

Pertini

Cossiga

Scalfaro

Ciampi

Napolitano ←testa

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 4 / 35

Page 6: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Possiamo imporre delle restrizioni sui modi in cui gli elementivengono aggiunti o eliminati da una lista

Una pila (stack) e una lista in cui i vari elementi possono essereinseriti o rimossi solo dalla testa

Otteniamo un modello di struttura LIFO (Last In, First Out):l’ultimo elemento inserito nella lista sara il primo ad essere tolto

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 5 / 35

Page 7: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Esempio

pila di libri

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 6 / 35

Page 8: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Una coda (queue) e una lista in cui i termini possono essere inseritisolo in coda e rimossi solo dalla testa

Una coda ha una struttura di tipo FIFO (First In, First Out): ilprimo elemento ad essere inserito corrisponde al primo elemento cheverra tolto

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 7 / 35

Page 9: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Esempio

fila di bambini

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 8 / 35

Page 10: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Alberi

Un albero e una collezione di elementi organizzati in modo gerarchico

radice

nodo nodo

foglia foglia foglia foglia

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 9 / 35

Page 11: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Esempio

NASA Astrobiology Institute

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 10 / 35

Page 12: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Nella memoria principale del computer i dati sono organizzati comesuccessione di celle di memoria

L’organizzazione secondo le strutture di alberi, liste o array riguardagli utenti ed e solo simulata all’interno di un computer in modi diversia seconda della struttura voluta:

gli utenti non vedono come i dati sono organizzati nella memoria

l’accesso ai dati avviene come se fossero organizzati secondo lastruttura desiderata

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 11 / 35

Page 13: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Ogni cella di memoria e identificata da un indirizzo, che e un valorenumerico

Anche l’indirizzo di una cella viene memorizzato in una cella dimemoria, chiamata puntatore

Ogni elemento di una struttura e memorizzato in una cella, e quindi ilpuntatore di un determinato elemento contiene l’indirizzo della cellain cui questo elemento e memorizzato

Le strutture elencate corrispondono quindi a determinati modi diorganizzare le celle di memoria e i puntatori

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 12 / 35

Page 14: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Le strutture in cui sono organizzati i dati possono essere di tipostatico oppure dinamico.

Una struttura statica e utile quando si deve accedere ai dati perleggerli o cambiare i loro valori, ma la dimensione o la configurazionedella struttura non cambiano nel tempo. Nel momento della creazionedella struttura si riserva lo spazio necessario per contenere i suoi dati

Se invece c’e bisogno di aggiungere o rimuovere elementi, omodificare la struttura, si usa un tipo di struttura dinamica. Inquesto caso si deve considerare il fatto che la struttura puo crescere equindi potrebbe essere necessario spostare i dati in una parte dimemoria in cui c’e piu spazio disponibile

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 13 / 35

Page 15: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Array omogenei 1-dimensionali

Identifichiamo i dati nell’array grazie alla loro posizione

I dati vengono memorizzati in una successione di celle di memoriacon indirizzi consecutivi

Se x e l’indirizzo della prima cella di memoria, allora l’indirizzo dellaj-esima cella di memoria e x + (j − 1)

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 14 / 35

Page 16: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Array omogenei 2-dimensionali

Si memorizzano i dati riga per riga oppure colonna per colonna. Nellarappresentazione per riga, se x e l’indirizzo della prima cella dimemoria e il numero di colonne e c , l’indirizzo dell’elemento che stanella i-esima riga e j-esima colonna e

x + c(i − 1) + (j − 1)

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 15 / 35

Page 17: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Array eterogenei

Se il numero di celle richieste per ogni componente dell’array e fisso,possiamo memorizzarlo in un blocco di celle consecutive come nelcaso di array omogenei

Se ad esempio abbiamo tre componenti che richiedonorispettivamente n, m, l celle di memoria e x e l’indirizzo della primacella, l’indirizzo della prima cella della seconda componente e x + n

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 16 / 35

Page 18: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Nel caso di array dinamici, ogni componente viene memorizzata inuna porzione di memoria separata

Le varie componenti sono poi collegate utilizzando puntatori

Ad esempio se si deve memorizzare un array eterogeneo formato datre componenti, in memoria bisogna anche riservare uno spazio per ipuntatori. Se il blocco di memoria in cui questi sono memorizzati haindirizzo x , possiamo trovare la prima componente dell’arrayguardando a cosa punta il puntatore con indirizzo x , e per accederealla componente successiva dell’array bisogna riferirsi a quantoriportato nel puntatore che ha indirizzo x + 1

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 17 / 35

Page 19: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Liste

Possono essere memorizzate in un unico blocco di celle di memoriacon indirizzi consecutivi: se assumiamo che ogni elemento della listanon sia piu lungo di n caratteri, possiamo dividere il blocco di celle insotto-blocchi, ognuno contenente n celle

Questo metodo va bene nel caso di liste statiche, in cui compare unnumero fisso di elementi. Rimuovere un elemento provocherebbeinfatti la creazione di un buco nella lista, mentre aggiungere unelemento richiederebbe di spostare la lista in una porzione di memoriain grado di contenerla tutta

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 18 / 35

Page 20: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Per le liste dinamiche bisogna agire diversamente:

ogni elemento della lista viene memorizzato in un’area dellamemoria

le varie celle di memoria vengono collegate tramite puntatori

Se ogni elemento della lista e formato da n caratteri, lo spaziorichiesto per memorizzali consiste in n + 1 celle di memoria: n celleper l’elemento e una cella per il puntatore dell’elemento successivo

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 19 / 35

Page 21: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Ogni lista ha una testa e una coda: un puntatore particolare indica lacella di memoria che contiene l’elemento in testa alla lista, mentreall’ultimo elemento si associa un puntatore NULL, che indica che nonci sono termini successivi nella lista.

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 20 / 35

Page 22: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Ogni lista ha una testa e una coda: un puntatore particolare indica lacella di memoria che contiene l’elemento in testa alla lista, mentreall’ultimo elemento si associa un puntatore NULL, che indica che nonci sono termini successivi nella lista.

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 20 / 35

Page 23: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

In questo modo le operazioni di inserimento ed eliminazione dielementi si fanno unicamente con i puntatori

Per rimuovere un elemento basta modificare il puntatore precedente,facendogli indicare l’elemento successivo a quello che si vuoleeliminare

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 21 / 35

Page 24: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

In questo modo le operazioni di inserimento ed eliminazione dielementi si fanno unicamente con i puntatori

Per rimuovere un elemento basta modificare il puntatore precedente,facendogli indicare l’elemento successivo a quello che si vuoleeliminare

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 21 / 35

Page 25: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

In questo modo le operazioni di inserimento ed eliminazione dielementi si fanno unicamente con i puntatori

Per rimuovere un elemento basta modificare il puntatore precedente,facendogli indicare l’elemento successivo a quello che si vuoleeliminare

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 21 / 35

Page 26: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Per aggiungere un elemento, dopo aver trovato lo spazio di memoriaadatto per contenerlo, bisogna modificare due puntatori: quellodell’elemento precedente e quello del nuovo elemento

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 22 / 35

Page 27: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Per aggiungere un elemento, dopo aver trovato lo spazio di memoriaadatto per contenerlo, bisogna modificare due puntatori: quellodell’elemento precedente e quello del nuovo elemento

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 22 / 35

Page 28: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Per aggiungere un elemento, dopo aver trovato lo spazio di memoriaadatto per contenerlo, bisogna modificare due puntatori: quellodell’elemento precedente e quello del nuovo elemento

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 22 / 35

Page 29: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Pile

Una delle estremita del blocco di memoria in cui memorizzare la pilaviene utilizzata come base (cella in cui viene memorizzato il primoelemento). Gli elementi da inserire vengono posti successivamenteandando in direzione dell’altra estremita

Quello che cambia quando si aggiungono o rimuovono elementi dauna pila e la posizione della testa: un puntatore contiene quindil’indirizzo della testa della pila

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 23 / 35

Page 30: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Per aggiungere un elemento, il puntatore viene modificato ad indicarela posizione immediatamente oltre la testa e quindi in questaposizione si va ad inserire il nuovo elemento

Per eliminare un elemento basta modificare il puntatore in modo chepunti all’elemento precedente

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 24 / 35

Page 31: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Code

Poiche gli elementi vengono inseriti dal fondo e tolti dalla testa,servono due puntatori alle due estremita

Quando la coda e vuota, entrambi i puntatori indicano la stessaposizione

Per inserire un elemento, si cambia la posizione del puntatore allacoda

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 25 / 35

Page 32: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Quando si elimina un elemento, quello che cambia e il puntatore allatesta

Con le operazioni di aggiunta ed eliminazione dei termini, la coda“scorre”nella memoria

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 26 / 35

Page 33: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Per mantenere sempre i termini all’interno dello stesso blocco dimemoria, quando il puntatore alla coda arriva ad indicare l’estremitadel blocco di memoria, i nuovi termini da aggiungere vengono postiall’altra estremita. Otteniamo una struttura circolare

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 27 / 35

Page 34: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Alberi binari

Un albero binario e un albero in cui ogni nodo ha al massimo due figli.

Per memorizzare una struttura di questo tipo possiamo usare ipuntatori. Ogni nodo dell’albero consiste di tre componenti

il dato

un puntatore al primo figlio (a sinistra nel grafico dell’albero)

un puntatore al secondo figlio (a destra nel grafico dell’albero)

Quindi ogni nodo deve essere pensato come un blocco continuo dicelle di memoria

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 28 / 35

Page 35: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Ogni puntatore deve puntare o ad un figlio del nodo a cui e associatooppure deve avere valore NULL, che significa che non ci sono nodisuccessivi in quella direzione

Come per le liste, uno speciale puntatore indica qual e l’elementoiniziale dell’albero, cioe la radice

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 29 / 35

Page 36: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Un altro modo per memorizzare alberi binari puo essere quello diconsiderare un unico blocco di memoria in cui vengono messi insuccessione un nodo, il figlio sinistro, il figlio destro e cosı via: i figlidel nodo in posizione n sono in posizione 2n (sinistro) e 2n + 1(destro)

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 30 / 35

Page 37: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

In questo modo si trovano facilmente genitori, figli o fratelli di unnodo, ma nel caso di alberi sbilanciati oppure con tanti buchi, restanoinutilizzate molte celle di memoria

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 31 / 35

Page 38: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

I linguaggi di programmazione mettono a disposizione dei tipi di datiprimitivi, come ad esempio gli interi e i reali

Ci sono anche dei modi in cui creare dei tipi di dati personalizzati, aseconda delle proprie esigenze

Supponiamo di dover gestire molte variabili contemporaneamente,che hanno tutte la stessa struttura, per esempio vogliamo catalogaredei libri indicando autore, anno di pubblicazione e genere letterario

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 32 / 35

Page 39: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Invece di definire ogni volta una variabile con la struttura desiderata,si puo definire direttamente un nuovo tipo di dato con la nuovastruttura che si intende utilizzare: definiamo il nuovo tipo di datoLibro:

define type Libro {char Autore;

int Anno;

char Genere;

}

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 33 / 35

Page 40: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Successivamente questo nuovo tipo di dato viene utilizzato come sefosse un tipo primitivo: come per una variabile intera dichiariamo

int a;

per un dato del nuovo tipo possiamo dichiarare

Libro Amleto;

Quindi la variabile Amleto fa riferimento ad una struttura contenenteautore, anno e genere del libro e possiamo poi andare ad assegnare lecaratteristiche

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 34 / 35

Page 41: Strutture dati

Strutture dati

Arianna Guidolin

Strutture

Array

Liste

Pile

Code

Alberi

Organizzazionenella memoria

Puntatori

Strutture statichee dinamiche

Memorizzazionedelle strutture

Array

Liste

Pile e code

Alberi binari

Creazione di tipidi dati

Un tipo di dato completo e costituito da:

un metodo di memorizzazione dei dati

un insieme di operazioni

Nella creazione di un nuovo tipo di dato abbiamo solo descritto comesi possa definire un metodo di memorizzazione di alcuni dati entrouna certa struttura, ma non abbiamo posto condizioni per poter fareoperazioni

Per aggiungere procedure sui nuovi tipi di dati, bisogna definirleall’interno della definizione del tipo stesso. I tipi definiti in cuicompaiono anche operazioni vengono chiamati tipi di dati astratti

Arianna Guidolin (Universita degli Studi di Trento) Strutture dati 4 maggio 2012 35 / 35