SlideShare a Scribd company logo
Strutture dati

Arianna Guidolin

Strutture
Array
Liste
 Pile
 Code
                                                        Strutture dati
Alberi
                                       J. Glenn Brookshear, Computer Science: An Overview
Organizzazione
nella memoria                                     Capitolo 8: Data Abstractions
Puntatori

Strutture statiche
e dinamiche

Memorizzazione                                            Arianna Guidolin
delle strutture
Array
Liste                                                 Universit` degli Studi di Trento
                                                               a
 Pile e code
Alberi binari
Creazione di tipi
di dati
                                                            4 maggio 2012




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

Arianna Guidolin

Strutture
Array
Liste
 Pile
                        Array
 Code
Alberi
Organizzazione
nella memoria
                        Si chiamano array le strutture di dati organizzate come vettori o
Puntatori
                        matrici.
Strutture statiche
e dinamiche

Memorizzazione
delle strutture
Array
                        Array che contengono dati dello stesso tipo si dicono omogenei,
Liste                   mentre array che contengono dati di diverso tipo si dicono eterogenei
 Pile e code
Alberi binari
Creazione di tipi
di dati




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

Arianna Guidolin

Strutture               Liste
Array
Liste
 Pile
 Code                   Una lista ` una collezione di dati organizzati sequenzialmente
                                  e
Alberi
Organizzazione          L’inizio di una lista si chiama testa, la fine coda
nella memoria

Puntatori               Le operazioni che si possono fare su una lista sono:
Strutture statiche
e dinamiche                      rimuovere elementi
Memorizzazione
delle strutture                  aggiungere elementi
Array
Liste                            controllare quali elementi sono presenti
 Pile e code
Alberi binari                    cambiare l’ordine degli elementi
Creazione di tipi
di dati                          cercare un determinato elemento



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

Arianna Guidolin

Strutture
Array
Liste
 Pile
 Code                   Esempi di liste
Alberi
Organizzazione                       Mario            ← testa
nella memoria

Puntatori                            Giovanni
Strutture statiche
e dinamiche                          Francesca
Memorizzazione
delle strutture                      Lucia ← coda
Array
Liste
 Pile e code
Alberi binari
Creazione di tipi
di dati




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

Arianna Guidolin

Strutture
Array
Liste                   Esempi di liste
 Pile
 Code
Alberi
                                   De Nicola          ←coda
                                                                               Pertini
Organizzazione
nella memoria                      Einaudi
                                                                               Cossiga
Puntatori
                                   Gronchi
Strutture statiche
e dinamiche
                                                                               Scalfaro
                                   Segni
Memorizzazione
delle strutture
                                                                               Ciampi
Array                              Saragat
Liste                                                                          Napolitano ←testa
 Pile e code
Alberi binari
                                   Leone
Creazione di tipi
di dati




Arianna Guidolin (Universit` degli Studi di Trento)
                           a                                  Strutture dati               4 maggio 2012   4 / 35
Strutture dati

Arianna Guidolin

Strutture
Array
Liste
 Pile
                        Possiamo imporre delle restrizioni sui modi in cui gli elementi
 Code                   vengono aggiunti o eliminati da una lista
Alberi
Organizzazione
nella memoria

Puntatori

Strutture statiche
                        Una pila (stack) ` una lista in cui i vari elementi possono essere
                                           e
e dinamiche
                        inseriti o rimossi solo dalla testa
Memorizzazione
delle strutture
Array
                        Otteniamo un modello di struttura LIFO (Last In, First Out):
Liste
 Pile e code
                        l’ultimo elemento inserito nella lista sar` il primo ad essere tolto
                                                                  a
Alberi binari
Creazione di tipi
di dati




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

Arianna Guidolin

Strutture
Array
                        Esempio
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
                                                             pila di libri




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

Arianna Guidolin

Strutture
Array
Liste
 Pile
 Code
                        Una coda (queue) ` una lista in cui i termini possono essere inseriti
                                           e
Alberi                  solo in coda e rimossi solo dalla testa
Organizzazione
nella memoria

Puntatori

Strutture statiche
e dinamiche             Una coda ha una struttura di tipo FIFO (First In, First Out): il
Memorizzazione          primo elemento ad essere inserito corrisponde al primo elemento che
delle strutture
Array                   verr` tolto
                            a
Liste
 Pile e code
Alberi binari
Creazione di tipi
di dati




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

Arianna Guidolin

Strutture
Array
                        Esempio
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
                                                         fila di bambini




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

Arianna Guidolin
                        Alberi
Strutture
Array
Liste
 Pile                   Un albero ` una collezione di elementi organizzati in modo gerarchico
                                  e
 Code
Alberi
Organizzazione
nella memoria
                                                                            radice
Puntatori

Strutture statiche
e dinamiche

Memorizzazione                                        nodo                           nodo
delle strutture
Array
Liste
 Pile e code
Alberi binari
Creazione di tipi
di dati
                                     foglia           foglia                foglia   foglia




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

Arianna Guidolin
                        Esempio
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




                                                        NASA Astrobiology Institute



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

Arianna Guidolin

Strutture
Array
Liste                   Nella memoria principale del computer i dati sono organizzati come
 Pile
 Code                   successione di celle di memoria
Alberi
Organizzazione
nella memoria
                        L’organizzazione secondo le strutture di alberi, liste o array riguarda
Puntatori
                        gli utenti ed ` solo simulata all’interno di un computer in modi diversi
                                      e
Strutture statiche
                        a seconda della struttura voluta:
e dinamiche

Memorizzazione
                                 gli utenti non vedono come i dati sono organizzati nella memoria
delle strutture
Array
                                 l’accesso ai dati avviene come se fossero organizzati secondo la
Liste
 Pile e code
                                 struttura desiderata
Alberi binari
Creazione di tipi
di dati




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

Arianna Guidolin

Strutture
Array                   Ogni cella di memoria ` identificata da un indirizzo, che ` un valore
                                              e                                  e
Liste
 Pile                   numerico
 Code
Alberi
                        Anche l’indirizzo di una cella viene memorizzato in una cella di
Organizzazione
nella memoria           memoria, chiamata puntatore
Puntatori

Strutture statiche
                        Ogni elemento di una struttura ` memorizzato in una cella, e quindi il
                                                       e
e dinamiche
                        puntatore di un determinato elemento contiene l’indirizzo della cella
Memorizzazione
delle strutture         in cui questo elemento ` memorizzato
                                               e
Array
Liste                   Le strutture elencate corrispondono quindi a determinati modi di
 Pile e code
Alberi binari           organizzare le celle di memoria e i puntatori
Creazione di tipi
di dati




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

Arianna Guidolin

Strutture               Le strutture in cui sono organizzati i dati possono essere di tipo
Array
Liste                   statico oppure dinamico.
 Pile
 Code
Alberi
                        Una struttura statica ` utile quando si deve accedere ai dati per
                                                 e
Organizzazione          leggerli o cambiare i loro valori, ma la dimensione o la configurazione
nella memoria
                        della struttura non cambiano nel tempo. Nel momento della creazione
Puntatori

Strutture statiche
                        della struttura si riserva lo spazio necessario per contenere i suoi dati
e dinamiche

Memorizzazione
                        Se invece c’` bisogno di aggiungere o rimuovere elementi, o
                                    e
delle strutture
                        modificare la struttura, si usa un tipo di struttura dinamica. In
Array
Liste                   questo caso si deve considerare il fatto che la struttura pu` crescere e
                                                                                    o
 Pile e code
Alberi binari           quindi potrebbe essere necessario spostare i dati in una parte di
Creazione di tipi
di dati
                        memoria in cui c’` pi` spazio disponibile
                                          e u




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

Arianna Guidolin

Strutture
Array
Liste
 Pile
                        Array omogenei 1-dimensionali
 Code
Alberi
Organizzazione
nella memoria
                        Identifichiamo i dati nell’array grazie alla loro posizione
Puntatori
                        I dati vengono memorizzati in una successione di celle di memoria
Strutture statiche
e dinamiche             con indirizzi consecutivi
Memorizzazione
delle strutture         Se x ` l’indirizzo della prima cella di memoria, allora l’indirizzo della
                              e
Array
Liste                   j-esima cella di memoria ` x + (j − 1)
                                                    e
 Pile e code
Alberi binari
Creazione di tipi
di dati




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

Arianna Guidolin
                        Array omogenei 2-dimensionali
Strutture
Array
Liste
                        Si memorizzano i dati riga per riga oppure colonna per colonna. Nella
 Pile
 Code
                        rappresentazione per riga, se x ` l’indirizzo della prima cella di
                                                         e
Alberi                  memoria e il numero di colonne ` c, l’indirizzo dell’elemento che sta
                                                          e
Organizzazione
nella memoria
                        nella i-esima riga e j-esima colonna `e
Puntatori

Strutture statiche
                                                      x + c(i − 1) + (j − 1)
e dinamiche

Memorizzazione
delle strutture
Array
Liste
 Pile e code
Alberi binari
Creazione di tipi
di dati




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

Arianna Guidolin

Strutture
Array
Liste
 Pile
                        Array eterogenei
 Code
Alberi
Organizzazione
nella memoria
                        Se il numero di celle richieste per ogni componente dell’array ` fisso,
                                                                                       e
Puntatori
                        possiamo memorizzarlo in un blocco di celle consecutive come nel
Strutture statiche
                        caso di array omogenei
e dinamiche

Memorizzazione          Se ad esempio abbiamo tre componenti che richiedono
delle strutture
Array
                        rispettivamente n, m, l celle di memoria e x ` l’indirizzo della prima
                                                                         e
Liste
 Pile e code
                        cella, l’indirizzo della prima cella della seconda componente ` x + n
                                                                                      e
Alberi binari
Creazione di tipi
di dati




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

Arianna Guidolin

Strutture
Array                   Nel caso di array dinamici, ogni componente viene memorizzata in
Liste
 Pile
                        una porzione di memoria separata
 Code
Alberi                  Le varie componenti sono poi collegate utilizzando puntatori
Organizzazione
nella memoria
                        Ad esempio se si deve memorizzare un array eterogeneo formato da
Puntatori
                        tre componenti, in memoria bisogna anche riservare uno spazio per i
Strutture statiche
e dinamiche             puntatori. Se il blocco di memoria in cui questi sono memorizzati ha
Memorizzazione
delle strutture
                        indirizzo x, possiamo trovare la prima componente dell’array
Array                   guardando a cosa punta il puntatore con indirizzo x, e per accedere
Liste
 Pile e code            alla componente successiva dell’array bisogna riferirsi a quanto
Alberi binari
                        riportato nel puntatore che ha indirizzo x + 1
Creazione di tipi
di dati




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

Arianna Guidolin

Strutture
Array
                        Liste
Liste
 Pile
 Code
Alberi
                        Possono essere memorizzate in un unico blocco di celle di memoria
Organizzazione          con indirizzi consecutivi: se assumiamo che ogni elemento della lista
nella memoria
                        non sia pi` lungo di n caratteri, possiamo dividere il blocco di celle in
                                  u
Puntatori
                        sotto-blocchi, ognuno contenente n celle
Strutture statiche
e dinamiche

Memorizzazione
                        Questo metodo va bene nel caso di liste statiche, in cui compare un
delle strutture         numero fisso di elementi. Rimuovere un elemento provocherebbe
Array
Liste                   infatti la creazione di un buco nella lista, mentre aggiungere un
 Pile e code
Alberi binari           elemento richiederebbe di spostare la lista in una porzione di memoria
Creazione di tipi       in grado di contenerla tutta
di dati




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

Arianna Guidolin

Strutture
Array
Liste
 Pile                   Per le liste dinamiche bisogna agire diversamente:
 Code
Alberi                           ogni elemento della lista viene memorizzato in un’area della
Organizzazione
nella memoria
                                 memoria
Puntatori                        le varie celle di memoria vengono collegate tramite puntatori
Strutture statiche
e dinamiche
                        Se ogni elemento della lista ` formato da n caratteri, lo spazio
                                                     e
Memorizzazione
delle strutture         richiesto per memorizzali consiste in n + 1 celle di memoria: n celle
Array
Liste
                        per l’elemento e una cella per il puntatore dell’elemento successivo
 Pile e code
Alberi binari
Creazione di tipi
di dati




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

Arianna Guidolin

Strutture               Ogni lista ha una testa e una coda: un puntatore particolare indica la
Array
Liste                   cella di memoria che contiene l’elemento in testa alla lista, mentre
 Pile
 Code                   all’ultimo elemento si associa un puntatore NULL, che indica che non
Alberi
                        ci sono termini successivi nella lista.
Organizzazione
nella memoria

Puntatori

Strutture statiche
e dinamiche

Memorizzazione
delle strutture
Array
Liste
 Pile e code
Alberi binari
Creazione di tipi
di dati




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

Arianna Guidolin

Strutture               Ogni lista ha una testa e una coda: un puntatore particolare indica la
Array
Liste                   cella di memoria che contiene l’elemento in testa alla lista, mentre
 Pile
 Code                   all’ultimo elemento si associa un puntatore NULL, che indica che non
Alberi
                        ci sono termini successivi nella lista.
Organizzazione
nella memoria

Puntatori

Strutture statiche
e dinamiche

Memorizzazione
delle strutture
Array
Liste
 Pile e code
Alberi binari
Creazione di tipi
di dati




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

Arianna Guidolin

Strutture               In questo modo le operazioni di inserimento ed eliminazione di
Array
Liste
                        elementi si fanno unicamente con i puntatori
 Pile
 Code
Alberi
                        Per rimuovere un elemento basta modificare il puntatore precedente,
Organizzazione
                        facendogli indicare l’elemento successivo a quello che si vuole
nella memoria
                        eliminare
Puntatori

Strutture statiche
e dinamiche

Memorizzazione
delle strutture
Array
Liste
 Pile e code
Alberi binari
Creazione di tipi
di dati




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

Arianna Guidolin

Strutture               In questo modo le operazioni di inserimento ed eliminazione di
Array
Liste
                        elementi si fanno unicamente con i puntatori
 Pile
 Code
Alberi
                        Per rimuovere un elemento basta modificare il puntatore precedente,
Organizzazione
                        facendogli indicare l’elemento successivo a quello che si vuole
nella memoria
                        eliminare
Puntatori

Strutture statiche
e dinamiche

Memorizzazione
delle strutture
Array
Liste
 Pile e code
Alberi binari
Creazione di tipi
di dati




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

Arianna Guidolin

Strutture               In questo modo le operazioni di inserimento ed eliminazione di
Array
Liste
                        elementi si fanno unicamente con i puntatori
 Pile
 Code
Alberi
                        Per rimuovere un elemento basta modificare il puntatore precedente,
Organizzazione
                        facendogli indicare l’elemento successivo a quello che si vuole
nella memoria
                        eliminare
Puntatori

Strutture statiche
e dinamiche

Memorizzazione
delle strutture
Array
Liste
 Pile e code
Alberi binari
Creazione di tipi
di dati




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

Arianna Guidolin

Strutture
Array
Liste
                        Per aggiungere un elemento, dopo aver trovato lo spazio di memoria
 Pile
 Code
                        adatto per contenerlo, bisogna modificare due puntatori: quello
Alberi                  dell’elemento precedente e quello del nuovo elemento
Organizzazione
nella memoria

Puntatori

Strutture statiche
e dinamiche

Memorizzazione
delle strutture
Array
Liste
 Pile e code
Alberi binari
Creazione di tipi
di dati




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

Arianna Guidolin

Strutture
Array
Liste
                        Per aggiungere un elemento, dopo aver trovato lo spazio di memoria
 Pile
 Code
                        adatto per contenerlo, bisogna modificare due puntatori: quello
Alberi                  dell’elemento precedente e quello del nuovo elemento
Organizzazione
nella memoria

Puntatori

Strutture statiche
e dinamiche

Memorizzazione
delle strutture
Array
Liste
 Pile e code
Alberi binari
Creazione di tipi
di dati




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

Arianna Guidolin

Strutture
Array
Liste
                        Per aggiungere un elemento, dopo aver trovato lo spazio di memoria
 Pile
 Code
                        adatto per contenerlo, bisogna modificare due puntatori: quello
Alberi                  dell’elemento precedente e quello del nuovo elemento
Organizzazione
nella memoria

Puntatori

Strutture statiche
e dinamiche

Memorizzazione
delle strutture
Array
Liste
 Pile e code
Alberi binari
Creazione di tipi
di dati




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

Arianna Guidolin

Strutture
Array
Liste
                        Pile
 Pile
 Code
Alberi
Organizzazione
                        Una delle estremit` del blocco di memoria in cui memorizzare la pila
                                           a
nella memoria           viene utilizzata come base (cella in cui viene memorizzato il primo
Puntatori
                        elemento). Gli elementi da inserire vengono posti successivamente
Strutture statiche
e dinamiche             andando in direzione dell’altra estremit`a
Memorizzazione
delle strutture         Quello che cambia quando si aggiungono o rimuovono elementi da
Array
Liste
                        una pila ` la posizione della testa: un puntatore contiene quindi
                                  e
 Pile e code
Alberi binari
                        l’indirizzo della testa della pila
Creazione di tipi
di dati




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

Arianna Guidolin
                        Per aggiungere un elemento, il puntatore viene modificato ad indicare
Strutture
Array
                        la posizione immediatamente oltre la testa e quindi in questa
Liste                   posizione si va ad inserire il nuovo elemento
 Pile
 Code
Alberi                  Per eliminare un elemento basta modificare il puntatore in modo che
Organizzazione
nella memoria
                        punti all’elemento precedente
Puntatori

Strutture statiche
e dinamiche

Memorizzazione
delle strutture
Array
Liste
 Pile e code
Alberi binari
Creazione di tipi
di dati




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

Arianna Guidolin
                        Code
Strutture
Array
Liste
                        Poich´ gli elementi vengono inseriti dal fondo e tolti dalla testa,
                             e
 Pile                   servono due puntatori alle due estremit`a
 Code
Alberi
Organizzazione
                        Quando la coda ` vuota, entrambi i puntatori indicano la stessa
                                       e
nella memoria           posizione
Puntatori

Strutture statiche      Per inserire un elemento, si cambia la posizione del puntatore alla
e dinamiche
                        coda
Memorizzazione
delle strutture
Array
Liste
 Pile e code
Alberi binari
Creazione di tipi
di dati




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

Arianna Guidolin

Strutture
Array
                        Quando si elimina un elemento, quello che cambia ` il puntatore alla
                                                                         e
Liste                   testa
 Pile
 Code
Alberi
Organizzazione
nella memoria

Puntatori

Strutture statiche
e dinamiche

Memorizzazione
delle strutture
Array
Liste
 Pile e code
Alberi binari           Con le operazioni di aggiunta ed eliminazione dei termini, la coda
Creazione di tipi       “scorre”nella memoria
di dati




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

Arianna Guidolin        Per mantenere sempre i termini all’interno dello stesso blocco di
Strutture               memoria, quando il puntatore alla coda arriva ad indicare l’estremit`
                                                                                            a
Array
Liste
                        del blocco di memoria, i nuovi termini da aggiungere vengono posti
 Pile                   all’altra estremit`. Otteniamo una struttura circolare
                                          a
 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




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

Arianna Guidolin

Strutture
Array
                        Alberi binari
Liste
 Pile
 Code
Alberi
                        Un albero binario ` un albero in cui ogni nodo ha al massimo due figli.
                                          e
Organizzazione
nella memoria           Per memorizzare una struttura di questo tipo possiamo usare i
Puntatori               puntatori. Ogni nodo dell’albero consiste di tre componenti
Strutture statiche
e dinamiche                      il dato
Memorizzazione
delle strutture
                                 un puntatore al primo figlio (a sinistra nel grafico dell’albero)
Array
Liste
                                 un puntatore al secondo figlio (a destra nel grafico dell’albero)
 Pile e code
Alberi binari           Quindi ogni nodo deve essere pensato come un blocco continuo di
Creazione di tipi
di dati
                        celle di memoria




Arianna Guidolin (Universit` degli Studi di Trento)
                           a                          Strutture dati                  4 maggio 2012   28 / 35
Strutture dati
                        Ogni puntatore deve puntare o ad un figlio del nodo a cui ` associato
                                                                                 e
Arianna Guidolin
                        oppure deve avere valore NULL, che significa che non ci sono nodi
Strutture
Array
                        successivi in quella direzione
Liste
 Pile                   Come per le liste, uno speciale puntatore indica qual ` l’elemento
                                                                              e
 Code
Alberi                  iniziale dell’albero, cio` la radice
                                                 e
Organizzazione
nella memoria

Puntatori

Strutture statiche
e dinamiche

Memorizzazione
delle strutture
Array
Liste
 Pile e code
Alberi binari
Creazione di tipi
di dati




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

Arianna Guidolin
                        Un altro modo per memorizzare alberi binari pu` essere quello di
                                                                           o
                        considerare un unico blocco di memoria in cui vengono messi in
Strutture
Array
                        successione un nodo, il figlio sinistro, il figlio destro e cos` via: i figli
                                                                                     ı
Liste
 Pile
                        del nodo in posizione n sono in posizione 2n (sinistro) e 2n + 1
 Code                   (destro)
Alberi
Organizzazione
nella memoria

Puntatori

Strutture statiche
e dinamiche

Memorizzazione
delle strutture
Array
Liste
 Pile e code
Alberi binari
Creazione di tipi
di dati




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

Arianna Guidolin
                        In questo modo si trovano facilmente genitori, figli o fratelli di un
Strutture
Array
                        nodo, ma nel caso di alberi sbilanciati oppure con tanti buchi, restano
Liste                   inutilizzate molte celle di memoria
 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




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

Arianna Guidolin

Strutture
Array
Liste
 Pile                   I linguaggi di programmazione mettono a disposizione dei tipi di dati
 Code
Alberi                  primitivi, come ad esempio gli interi e i reali
Organizzazione
nella memoria           Ci sono anche dei modi in cui creare dei tipi di dati personalizzati, a
Puntatori               seconda delle proprie esigenze
Strutture statiche
e dinamiche
                        Supponiamo di dover gestire molte variabili contemporaneamente,
Memorizzazione
delle strutture         che hanno tutte la stessa struttura, per esempio vogliamo catalogare
Array
Liste
                        dei libri indicando autore, anno di pubblicazione e genere letterario
 Pile e code
Alberi binari
Creazione di tipi
di dati




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

Arianna Guidolin

Strutture
Array
Liste                   Invece di definire ogni volta una variabile con la struttura desiderata,
 Pile
 Code                   si pu` definire direttamente un nuovo tipo di dato con la nuova
                             o
Alberi
                        struttura che si intende utilizzare: definiamo il nuovo tipo di dato
Organizzazione
nella memoria           Libro:
Puntatori
                                                      define type Libro {
Strutture statiche
e dinamiche                                             char Autore;
Memorizzazione
delle strutture
                                                        int Anno;
Array                                                   char Genere;
Liste
 Pile e code                                          }
Alberi binari
Creazione di tipi
di dati




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

Arianna Guidolin

Strutture
Array
Liste
                        Successivamente questo nuovo tipo di dato viene utilizzato come se
 Pile                   fosse un tipo primitivo: come per una variabile intera dichiariamo
 Code
Alberi
Organizzazione
                                                      int a;
nella memoria

Puntatori               per un dato del nuovo tipo possiamo dichiarare
Strutture statiche
e dinamiche                                           Libro Amleto;
Memorizzazione
delle strutture
Array
                        Quindi la variabile Amleto fa riferimento ad una struttura contenente
Liste                   autore, anno e genere del libro e possiamo poi andare ad assegnare le
 Pile e code
Alberi binari           caratteristiche
Creazione di tipi
di dati




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

Arianna Guidolin

Strutture
Array
                        Un tipo di dato completo ` costituito da:
                                                 e
Liste
 Pile                            un metodo di memorizzazione dei dati
 Code
Alberi                           un insieme di operazioni
Organizzazione
nella memoria           Nella creazione di un nuovo tipo di dato abbiamo solo descritto come
Puntatori               si possa definire un metodo di memorizzazione di alcuni dati entro
Strutture statiche
e dinamiche
                        una certa struttura, ma non abbiamo posto condizioni per poter fare
Memorizzazione
                        operazioni
delle strutture
Array                   Per aggiungere procedure sui nuovi tipi di dati, bisogna definirle
Liste
 Pile e code            all’interno della definizione del tipo stesso. I tipi definiti in cui
Alberi binari
Creazione di tipi
                        compaiono anche operazioni vengono chiamati tipi di dati astratti
di dati




Arianna Guidolin (Universit` degli Studi di Trento)
                           a                          Strutture dati            4 maggio 2012   35 / 35

More Related Content

Viewers also liked

Hizli ogrenme-semineri
Hizli ogrenme-semineriHizli ogrenme-semineri
Hizli ogrenme-seminerizeynep_zyn41
 
A {painter’s} touch
A {painter’s} touchA {painter’s} touch
A {painter’s} touch
shannapainter
 
20120000
2012000020120000
20120000Copy Mn
 
A {painter’s} mind
A {painter’s} mind A {painter’s} mind
A {painter’s} mind
shannapainter
 
PDR images 1
PDR images 1PDR images 1
PDR images 1
Davina Sandhu
 
JT Hillier Clips
JT Hillier ClipsJT Hillier Clips
JT Hillier Clips
mikecirelli
 
Afscheidsplechtigheid Stijn 19-07-2014
Afscheidsplechtigheid Stijn 19-07-2014Afscheidsplechtigheid Stijn 19-07-2014
Afscheidsplechtigheid Stijn 19-07-2014
Steven Verleysen
 

Viewers also liked (10)

Hizli ogrenme-semineri
Hizli ogrenme-semineriHizli ogrenme-semineri
Hizli ogrenme-semineri
 
A {painter’s} touch
A {painter’s} touchA {painter’s} touch
A {painter’s} touch
 
Escolma de lendas
Escolma de lendasEscolma de lendas
Escolma de lendas
 
Diplomas 1
Diplomas 1Diplomas 1
Diplomas 1
 
20120000
2012000020120000
20120000
 
A {painter’s} mind
A {painter’s} mind A {painter’s} mind
A {painter’s} mind
 
PDR images 1
PDR images 1PDR images 1
PDR images 1
 
JT Hillier Clips
JT Hillier ClipsJT Hillier Clips
JT Hillier Clips
 
Mina ise
Mina iseMina ise
Mina ise
 
Afscheidsplechtigheid Stijn 19-07-2014
Afscheidsplechtigheid Stijn 19-07-2014Afscheidsplechtigheid Stijn 19-07-2014
Afscheidsplechtigheid Stijn 19-07-2014
 

Strutture dati

  • 1. Strutture dati Arianna Guidolin Strutture Array Liste Pile Code Strutture dati Alberi J. Glenn Brookshear, Computer Science: An Overview Organizzazione nella memoria Capitolo 8: Data Abstractions Puntatori Strutture statiche e dinamiche Memorizzazione Arianna Guidolin delle strutture Array Liste Universit` degli Studi di Trento a Pile e code Alberi binari Creazione di tipi di dati 4 maggio 2012 Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 1 / 35
  • 2. Strutture dati Arianna Guidolin Strutture Array Liste Pile Array Code Alberi Organizzazione nella memoria Si chiamano array le strutture di dati organizzate come vettori o Puntatori matrici. Strutture statiche e dinamiche Memorizzazione delle strutture Array Array che contengono dati dello stesso tipo si dicono omogenei, Liste mentre array che contengono dati di diverso tipo si dicono eterogenei Pile e code Alberi binari Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 1 / 35
  • 3. Strutture dati Arianna Guidolin Strutture Liste Array Liste Pile Code Una lista ` una collezione di dati organizzati sequenzialmente e Alberi Organizzazione L’inizio di una lista si chiama testa, la fine coda nella memoria Puntatori Le operazioni che si possono fare su una lista sono: Strutture statiche e dinamiche rimuovere elementi Memorizzazione delle strutture aggiungere elementi Array Liste controllare quali elementi sono presenti Pile e code Alberi binari cambiare l’ordine degli elementi Creazione di tipi di dati cercare un determinato elemento Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 2 / 35
  • 4. Strutture dati Arianna Guidolin Strutture Array Liste Pile Code Esempi di liste Alberi Organizzazione Mario ← testa nella memoria Puntatori Giovanni Strutture statiche e dinamiche Francesca Memorizzazione delle strutture Lucia ← coda Array Liste Pile e code Alberi binari Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 3 / 35
  • 5. Strutture dati Arianna Guidolin Strutture Array Liste Esempi di liste Pile Code Alberi De Nicola ←coda Pertini Organizzazione nella memoria Einaudi Cossiga Puntatori Gronchi Strutture statiche e dinamiche Scalfaro Segni Memorizzazione delle strutture Ciampi Array Saragat Liste Napolitano ←testa Pile e code Alberi binari Leone Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 4 / 35
  • 6. Strutture dati Arianna Guidolin Strutture Array Liste Pile Possiamo imporre delle restrizioni sui modi in cui gli elementi Code vengono aggiunti o eliminati da una lista Alberi Organizzazione nella memoria Puntatori Strutture statiche Una pila (stack) ` una lista in cui i vari elementi possono essere e e dinamiche inseriti o rimossi solo dalla testa Memorizzazione delle strutture Array Otteniamo un modello di struttura LIFO (Last In, First Out): Liste Pile e code l’ultimo elemento inserito nella lista sar` il primo ad essere tolto a Alberi binari Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 5 / 35
  • 7. Strutture dati Arianna Guidolin Strutture Array Esempio 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 pila di libri Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 6 / 35
  • 8. Strutture dati Arianna Guidolin Strutture Array Liste Pile Code Una coda (queue) ` una lista in cui i termini possono essere inseriti e Alberi solo in coda e rimossi solo dalla testa Organizzazione nella memoria Puntatori Strutture statiche e dinamiche Una coda ha una struttura di tipo FIFO (First In, First Out): il Memorizzazione primo elemento ad essere inserito corrisponde al primo elemento che delle strutture Array verr` tolto a Liste Pile e code Alberi binari Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 7 / 35
  • 9. Strutture dati Arianna Guidolin Strutture Array Esempio 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 fila di bambini Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 8 / 35
  • 10. Strutture dati Arianna Guidolin Alberi Strutture Array Liste Pile Un albero ` una collezione di elementi organizzati in modo gerarchico e Code Alberi Organizzazione nella memoria radice Puntatori Strutture statiche e dinamiche Memorizzazione nodo nodo delle strutture Array Liste Pile e code Alberi binari Creazione di tipi di dati foglia foglia foglia foglia Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 9 / 35
  • 11. Strutture dati Arianna Guidolin Esempio 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 NASA Astrobiology Institute Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 10 / 35
  • 12. Strutture dati Arianna Guidolin Strutture Array Liste Nella memoria principale del computer i dati sono organizzati come Pile Code successione di celle di memoria Alberi Organizzazione nella memoria L’organizzazione secondo le strutture di alberi, liste o array riguarda Puntatori gli utenti ed ` solo simulata all’interno di un computer in modi diversi e Strutture statiche a seconda della struttura voluta: e dinamiche Memorizzazione gli utenti non vedono come i dati sono organizzati nella memoria delle strutture Array l’accesso ai dati avviene come se fossero organizzati secondo la Liste Pile e code struttura desiderata Alberi binari Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 11 / 35
  • 13. Strutture dati Arianna Guidolin Strutture Array Ogni cella di memoria ` identificata da un indirizzo, che ` un valore e e Liste Pile numerico Code Alberi Anche l’indirizzo di una cella viene memorizzato in una cella di Organizzazione nella memoria memoria, chiamata puntatore Puntatori Strutture statiche Ogni elemento di una struttura ` memorizzato in una cella, e quindi il e e dinamiche puntatore di un determinato elemento contiene l’indirizzo della cella Memorizzazione delle strutture in cui questo elemento ` memorizzato e Array Liste Le strutture elencate corrispondono quindi a determinati modi di Pile e code Alberi binari organizzare le celle di memoria e i puntatori Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 12 / 35
  • 14. Strutture dati Arianna Guidolin Strutture Le strutture in cui sono organizzati i dati possono essere di tipo Array Liste statico oppure dinamico. Pile Code Alberi Una struttura statica ` utile quando si deve accedere ai dati per e Organizzazione leggerli o cambiare i loro valori, ma la dimensione o la configurazione nella memoria della struttura non cambiano nel tempo. Nel momento della creazione Puntatori Strutture statiche della struttura si riserva lo spazio necessario per contenere i suoi dati e dinamiche Memorizzazione Se invece c’` bisogno di aggiungere o rimuovere elementi, o e delle strutture modificare la struttura, si usa un tipo di struttura dinamica. In Array Liste questo caso si deve considerare il fatto che la struttura pu` crescere e o Pile e code Alberi binari quindi potrebbe essere necessario spostare i dati in una parte di Creazione di tipi di dati memoria in cui c’` pi` spazio disponibile e u Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 13 / 35
  • 15. Strutture dati Arianna Guidolin Strutture Array Liste Pile Array omogenei 1-dimensionali Code Alberi Organizzazione nella memoria Identifichiamo i dati nell’array grazie alla loro posizione Puntatori I dati vengono memorizzati in una successione di celle di memoria Strutture statiche e dinamiche con indirizzi consecutivi Memorizzazione delle strutture Se x ` l’indirizzo della prima cella di memoria, allora l’indirizzo della e Array Liste j-esima cella di memoria ` x + (j − 1) e Pile e code Alberi binari Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 14 / 35
  • 16. Strutture dati Arianna Guidolin Array omogenei 2-dimensionali Strutture Array Liste Si memorizzano i dati riga per riga oppure colonna per colonna. Nella Pile Code rappresentazione per riga, se x ` l’indirizzo della prima cella di e Alberi memoria e il numero di colonne ` c, l’indirizzo dell’elemento che sta e Organizzazione nella memoria nella i-esima riga e j-esima colonna `e Puntatori Strutture statiche x + c(i − 1) + (j − 1) e dinamiche Memorizzazione delle strutture Array Liste Pile e code Alberi binari Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 15 / 35
  • 17. Strutture dati Arianna Guidolin Strutture Array Liste Pile Array eterogenei Code Alberi Organizzazione nella memoria Se il numero di celle richieste per ogni componente dell’array ` fisso, e Puntatori possiamo memorizzarlo in un blocco di celle consecutive come nel Strutture statiche caso di array omogenei e dinamiche Memorizzazione Se ad esempio abbiamo tre componenti che richiedono delle strutture Array rispettivamente n, m, l celle di memoria e x ` l’indirizzo della prima e Liste Pile e code cella, l’indirizzo della prima cella della seconda componente ` x + n e Alberi binari Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 16 / 35
  • 18. Strutture dati Arianna Guidolin Strutture Array Nel caso di array dinamici, ogni componente viene memorizzata in Liste Pile una porzione di memoria separata Code Alberi Le varie componenti sono poi collegate utilizzando puntatori Organizzazione nella memoria Ad esempio se si deve memorizzare un array eterogeneo formato da Puntatori tre componenti, in memoria bisogna anche riservare uno spazio per i Strutture statiche e dinamiche puntatori. Se il blocco di memoria in cui questi sono memorizzati ha Memorizzazione delle strutture indirizzo x, possiamo trovare la prima componente dell’array Array guardando a cosa punta il puntatore con indirizzo x, e per accedere Liste Pile e code alla componente successiva dell’array bisogna riferirsi a quanto Alberi binari riportato nel puntatore che ha indirizzo x + 1 Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 17 / 35
  • 19. Strutture dati Arianna Guidolin Strutture Array Liste Liste Pile Code Alberi Possono essere memorizzate in un unico blocco di celle di memoria Organizzazione con indirizzi consecutivi: se assumiamo che ogni elemento della lista nella memoria non sia pi` lungo di n caratteri, possiamo dividere il blocco di celle in u Puntatori sotto-blocchi, ognuno contenente n celle Strutture statiche e dinamiche Memorizzazione Questo metodo va bene nel caso di liste statiche, in cui compare un delle strutture numero fisso di elementi. Rimuovere un elemento provocherebbe Array Liste infatti la creazione di un buco nella lista, mentre aggiungere un Pile e code Alberi binari elemento richiederebbe di spostare la lista in una porzione di memoria Creazione di tipi in grado di contenerla tutta di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 18 / 35
  • 20. Strutture dati Arianna Guidolin Strutture Array Liste Pile Per le liste dinamiche bisogna agire diversamente: Code Alberi ogni elemento della lista viene memorizzato in un’area della Organizzazione nella memoria memoria Puntatori le varie celle di memoria vengono collegate tramite puntatori Strutture statiche e dinamiche Se ogni elemento della lista ` formato da n caratteri, lo spazio e Memorizzazione delle strutture richiesto per memorizzali consiste in n + 1 celle di memoria: n celle Array Liste per l’elemento e una cella per il puntatore dell’elemento successivo Pile e code Alberi binari Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 19 / 35
  • 21. Strutture dati Arianna Guidolin Strutture Ogni lista ha una testa e una coda: un puntatore particolare indica la Array Liste cella di memoria che contiene l’elemento in testa alla lista, mentre Pile Code all’ultimo elemento si associa un puntatore NULL, che indica che non Alberi ci sono termini successivi nella lista. Organizzazione nella memoria Puntatori Strutture statiche e dinamiche Memorizzazione delle strutture Array Liste Pile e code Alberi binari Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 20 / 35
  • 22. Strutture dati Arianna Guidolin Strutture Ogni lista ha una testa e una coda: un puntatore particolare indica la Array Liste cella di memoria che contiene l’elemento in testa alla lista, mentre Pile Code all’ultimo elemento si associa un puntatore NULL, che indica che non Alberi ci sono termini successivi nella lista. Organizzazione nella memoria Puntatori Strutture statiche e dinamiche Memorizzazione delle strutture Array Liste Pile e code Alberi binari Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 20 / 35
  • 23. Strutture dati Arianna Guidolin Strutture In questo modo le operazioni di inserimento ed eliminazione di Array Liste elementi si fanno unicamente con i puntatori Pile Code Alberi Per rimuovere un elemento basta modificare il puntatore precedente, Organizzazione facendogli indicare l’elemento successivo a quello che si vuole nella memoria eliminare Puntatori Strutture statiche e dinamiche Memorizzazione delle strutture Array Liste Pile e code Alberi binari Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 21 / 35
  • 24. Strutture dati Arianna Guidolin Strutture In questo modo le operazioni di inserimento ed eliminazione di Array Liste elementi si fanno unicamente con i puntatori Pile Code Alberi Per rimuovere un elemento basta modificare il puntatore precedente, Organizzazione facendogli indicare l’elemento successivo a quello che si vuole nella memoria eliminare Puntatori Strutture statiche e dinamiche Memorizzazione delle strutture Array Liste Pile e code Alberi binari Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 21 / 35
  • 25. Strutture dati Arianna Guidolin Strutture In questo modo le operazioni di inserimento ed eliminazione di Array Liste elementi si fanno unicamente con i puntatori Pile Code Alberi Per rimuovere un elemento basta modificare il puntatore precedente, Organizzazione facendogli indicare l’elemento successivo a quello che si vuole nella memoria eliminare Puntatori Strutture statiche e dinamiche Memorizzazione delle strutture Array Liste Pile e code Alberi binari Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 21 / 35
  • 26. Strutture dati Arianna Guidolin Strutture Array Liste Per aggiungere un elemento, dopo aver trovato lo spazio di memoria Pile Code adatto per contenerlo, bisogna modificare due puntatori: quello Alberi dell’elemento precedente e quello del nuovo elemento Organizzazione nella memoria Puntatori Strutture statiche e dinamiche Memorizzazione delle strutture Array Liste Pile e code Alberi binari Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 22 / 35
  • 27. Strutture dati Arianna Guidolin Strutture Array Liste Per aggiungere un elemento, dopo aver trovato lo spazio di memoria Pile Code adatto per contenerlo, bisogna modificare due puntatori: quello Alberi dell’elemento precedente e quello del nuovo elemento Organizzazione nella memoria Puntatori Strutture statiche e dinamiche Memorizzazione delle strutture Array Liste Pile e code Alberi binari Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 22 / 35
  • 28. Strutture dati Arianna Guidolin Strutture Array Liste Per aggiungere un elemento, dopo aver trovato lo spazio di memoria Pile Code adatto per contenerlo, bisogna modificare due puntatori: quello Alberi dell’elemento precedente e quello del nuovo elemento Organizzazione nella memoria Puntatori Strutture statiche e dinamiche Memorizzazione delle strutture Array Liste Pile e code Alberi binari Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 22 / 35
  • 29. Strutture dati Arianna Guidolin Strutture Array Liste Pile Pile Code Alberi Organizzazione Una delle estremit` del blocco di memoria in cui memorizzare la pila a nella memoria viene utilizzata come base (cella in cui viene memorizzato il primo Puntatori elemento). Gli elementi da inserire vengono posti successivamente Strutture statiche e dinamiche andando in direzione dell’altra estremit`a Memorizzazione delle strutture Quello che cambia quando si aggiungono o rimuovono elementi da Array Liste una pila ` la posizione della testa: un puntatore contiene quindi e Pile e code Alberi binari l’indirizzo della testa della pila Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 23 / 35
  • 30. Strutture dati Arianna Guidolin Per aggiungere un elemento, il puntatore viene modificato ad indicare Strutture Array la posizione immediatamente oltre la testa e quindi in questa Liste posizione si va ad inserire il nuovo elemento Pile Code Alberi Per eliminare un elemento basta modificare il puntatore in modo che Organizzazione nella memoria punti all’elemento precedente Puntatori Strutture statiche e dinamiche Memorizzazione delle strutture Array Liste Pile e code Alberi binari Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 24 / 35
  • 31. Strutture dati Arianna Guidolin Code Strutture Array Liste Poich´ gli elementi vengono inseriti dal fondo e tolti dalla testa, e Pile servono due puntatori alle due estremit`a Code Alberi Organizzazione Quando la coda ` vuota, entrambi i puntatori indicano la stessa e nella memoria posizione Puntatori Strutture statiche Per inserire un elemento, si cambia la posizione del puntatore alla e dinamiche coda Memorizzazione delle strutture Array Liste Pile e code Alberi binari Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 25 / 35
  • 32. Strutture dati Arianna Guidolin Strutture Array Quando si elimina un elemento, quello che cambia ` il puntatore alla e Liste testa Pile Code Alberi Organizzazione nella memoria Puntatori Strutture statiche e dinamiche Memorizzazione delle strutture Array Liste Pile e code Alberi binari Con le operazioni di aggiunta ed eliminazione dei termini, la coda Creazione di tipi “scorre”nella memoria di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 26 / 35
  • 33. Strutture dati Arianna Guidolin Per mantenere sempre i termini all’interno dello stesso blocco di Strutture memoria, quando il puntatore alla coda arriva ad indicare l’estremit` a Array Liste del blocco di memoria, i nuovi termini da aggiungere vengono posti Pile all’altra estremit`. Otteniamo una struttura circolare a 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 Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 27 / 35
  • 34. Strutture dati Arianna Guidolin Strutture Array Alberi binari Liste Pile Code Alberi Un albero binario ` un albero in cui ogni nodo ha al massimo due figli. e Organizzazione nella memoria Per memorizzare una struttura di questo tipo possiamo usare i Puntatori puntatori. Ogni nodo dell’albero consiste di tre componenti Strutture statiche e dinamiche il dato Memorizzazione delle strutture un puntatore al primo figlio (a sinistra nel grafico dell’albero) Array Liste un puntatore al secondo figlio (a destra nel grafico dell’albero) Pile e code Alberi binari Quindi ogni nodo deve essere pensato come un blocco continuo di Creazione di tipi di dati celle di memoria Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 28 / 35
  • 35. Strutture dati Ogni puntatore deve puntare o ad un figlio del nodo a cui ` associato e Arianna Guidolin oppure deve avere valore NULL, che significa che non ci sono nodi Strutture Array successivi in quella direzione Liste Pile Come per le liste, uno speciale puntatore indica qual ` l’elemento e Code Alberi iniziale dell’albero, cio` la radice e Organizzazione nella memoria Puntatori Strutture statiche e dinamiche Memorizzazione delle strutture Array Liste Pile e code Alberi binari Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 29 / 35
  • 36. Strutture dati Arianna Guidolin Un altro modo per memorizzare alberi binari pu` essere quello di o considerare un unico blocco di memoria in cui vengono messi in Strutture Array successione un nodo, il figlio sinistro, il figlio destro e cos` via: i figli ı Liste Pile del nodo in posizione n sono in posizione 2n (sinistro) e 2n + 1 Code (destro) Alberi Organizzazione nella memoria Puntatori Strutture statiche e dinamiche Memorizzazione delle strutture Array Liste Pile e code Alberi binari Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 30 / 35
  • 37. Strutture dati Arianna Guidolin In questo modo si trovano facilmente genitori, figli o fratelli di un Strutture Array nodo, ma nel caso di alberi sbilanciati oppure con tanti buchi, restano Liste inutilizzate molte celle di memoria 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 Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 31 / 35
  • 38. Strutture dati Arianna Guidolin Strutture Array Liste Pile I linguaggi di programmazione mettono a disposizione dei tipi di dati Code Alberi primitivi, come ad esempio gli interi e i reali Organizzazione nella memoria Ci sono anche dei modi in cui creare dei tipi di dati personalizzati, a Puntatori seconda delle proprie esigenze Strutture statiche e dinamiche Supponiamo di dover gestire molte variabili contemporaneamente, Memorizzazione delle strutture che hanno tutte la stessa struttura, per esempio vogliamo catalogare Array Liste dei libri indicando autore, anno di pubblicazione e genere letterario Pile e code Alberi binari Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 32 / 35
  • 39. Strutture dati Arianna Guidolin Strutture Array Liste Invece di definire ogni volta una variabile con la struttura desiderata, Pile Code si pu` definire direttamente un nuovo tipo di dato con la nuova o Alberi struttura che si intende utilizzare: definiamo il nuovo tipo di dato Organizzazione nella memoria Libro: Puntatori define type Libro { Strutture statiche e dinamiche char Autore; Memorizzazione delle strutture int Anno; Array char Genere; Liste Pile e code } Alberi binari Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 33 / 35
  • 40. Strutture dati Arianna Guidolin Strutture Array Liste Successivamente questo nuovo tipo di dato viene utilizzato come se Pile fosse un tipo primitivo: come per una variabile intera dichiariamo Code Alberi Organizzazione int a; nella memoria Puntatori per un dato del nuovo tipo possiamo dichiarare Strutture statiche e dinamiche Libro Amleto; Memorizzazione delle strutture Array Quindi la variabile Amleto fa riferimento ad una struttura contenente Liste autore, anno e genere del libro e possiamo poi andare ad assegnare le Pile e code Alberi binari caratteristiche Creazione di tipi di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 34 / 35
  • 41. Strutture dati Arianna Guidolin Strutture Array Un tipo di dato completo ` costituito da: e Liste Pile un metodo di memorizzazione dei dati Code Alberi un insieme di operazioni Organizzazione nella memoria Nella creazione di un nuovo tipo di dato abbiamo solo descritto come Puntatori si possa definire un metodo di memorizzazione di alcuni dati entro Strutture statiche e dinamiche una certa struttura, ma non abbiamo posto condizioni per poter fare Memorizzazione operazioni delle strutture Array Per aggiungere procedure sui nuovi tipi di dati, bisogna definirle Liste Pile e code all’interno della definizione del tipo stesso. I tipi definiti in cui Alberi binari Creazione di tipi compaiono anche operazioni vengono chiamati tipi di dati astratti di dati Arianna Guidolin (Universit` degli Studi di Trento) a Strutture dati 4 maggio 2012 35 / 35