SlideShare ist ein Scribd-Unternehmen logo
1 von 23
Downloaden Sie, um offline zu lesen
Lezione 17
Introduzione alle liste
Strutture dati dinamiche
    Vi sono problemi risolvibili



    efficacemente mediante
    algoritmi che fanno uso di
    strutture dati dinamiche
        Ossia che cambiano
    


        dimensione durante
        l'esecuzione dell'algoritmo


                                      2
Problema
    Supponiamo di dover



    memorizzare e ristampare una
    successione di valori il cui
    numero non sia noto a priori
    Supponiamo inoltre che, oltre



    ad inserirli, sia necessario di
    tanto in tanto estrarre alcuni
    elementi

                                      3
Array dinamico 1/2
    Possibile soluzione: array



    dinamico riallocato ogni volta
    che si renda necessario
    Ogni riallocazione ha costo O(N)




        Bisogna ricopiare tutti i valori
    


        nella nuova locazione
    Comunque si fa “ogni tanto”,



    per cui l'inserimento ha costo
    ammortizzato O(1)
                    O(1
                                           4
Array dinamico 2/2
    Però ad ogni estrazione di un



    elemento che non sia l'ultimo
    bisogna ricompattare l'array
    Questo costa O(N) tutte le volte





                                       5
Domanda
    Vi viene in mente una soluzione



    migliore?




                                      6
Proposta
    Perché ogni volta che dobbiamo



    aggiungere un elemento non lo
    allochiamo in memoria da solo?
    Se e quando dobbiamo estrarlo



    lo deallochiamo, di nuovo da
    solo



                                     7
Problemi
    Dove memorizziamo l'indirizzo



    dei vari elementi?
    Cominciamo dal primo ...





                                    8
Puntatore al primo elemento
    Potremmo memorizzare in una



    variabile di tipo puntatore
    l'indirizzo di tale elemento




                                   9
Puntatore al primo elemento
    Supponiamo che il primo valore sia 5




        Allochiamo in memoria spazio per
    


        un intero e memorizziamo il valore
        Memorizziamone l'indirizzo in una
    


        variabile p di tipo puntatore




                                             10
Puntatore al primo elemento

    Indirizzo
                           5
    primo
p   elemento
                     Oggetto dinamico
Variabile locale o
globale: oggetto
automatico o
statico


                                   11
Elementi successivi
    Supponiamo di inserire un altro



    valore, diciamo 7
    Come facciamo per



    memorizzare l'indirizzo del
    prossimo elemento, ed in
    generale di tutti i successivi
    elementi?


                                      12
Puntatore al successivo
    Per ciascun valore, potremmo



    allocare spazio in memoria
        sia per il valore dell'elemento,
    



        che per un puntatore che
    


        punti al prossimo elemento
    Così, una volta raggiunto un



    elemento, abbiamo le
    informazioni necessarie per
    accedere al prossimo
                                           13
Puntatore al successivo

                 5 Indirizzo    7 Indirizzo
                     prossimo      prossimo
                     elemento      elemento ?

    Indirizzo        Oggetti dinamici
    primo
p   elemento

Variabile locale o
globale: oggetto
automatico o
statico
                                                14
Ultimo elemento 1/2
    L'elemento contenente il valore



    7 è attualmente l'ultimo (ce ne
    sono solo due)
    Cosa conterrà il puntatore



    all'interno della struttura che lo
    rappresenta?
    Come facciamo a dire che non



    ci sono altri elementi dopo di
    lui?
                                         15
Ultimo elemento 2/2
    Possiamo assegnargli il valore 0



    (NULL)
               5 Indirizzo   7   0
                 prossimo
                   elemento

    Indirizzo
    primo
p   elemento

    Abbiamo costruito un oggetto di



    tipo lista concatenata
                                       16
Lista concatenata
    Struttura dati i cui



    oggetti/elementi sono disposti
    in ordine lineare
    Diversamente dall'array, in cui



    l'ordine è determinato dagli
    indici, l'ordine in una lista
    concatenata è determinato da
    un puntatore in ogni oggetto

                                      17
Terminologia 1/2
    Diremo che ciascun elemento



    contiene un campo
    informazione ed uno o due
    campi puntatore
    Il primo elemento di una lista è



    tipicamente chiamato testa
    (head) della lista
     head)
    L'ultimo elemento è tipicamente



    chiamato coda (tail) della lista
                   (tail)
                                       18
Terminologia 2/2
    Lista singolarmente concatenata o



    semplice: ciascun elemento
    semplice:
    contiene solo un puntatore al
    prossimo elemento
    Lista doppiamente concatenata o



    doppia: ciascun elemento contiene
    doppia:
    sia un puntatore al prossimo
    elemento che un puntatore
    all'elemento precedente


                                        19
Lista semplice 1/2
      Ciascun elemento contiene solo un
  


      puntatore al prossimo elemento


             inf Indir.    inf Indir.          inf
                                         ...
                  pross.        pross.               0
                  elem.         elem.
Indirizzo
              Testa                             Coda
testa
della
lista
Puntatore
alla lista
                                                       20
Lista semplice 2/2
    Il puntatore al prossimo elemento



    della coda della lista contiene il
    valore 0 (NULL)
    Il puntatore alla testa della lista



    individua la lista stessa
      E' perciò chiamato anche


        puntatore alla lista




                                          21
Tipo di dato lista 1/2
    Esistono varie librerie che forniscono il



    tipo di dato lista
    Vengono fornite le operazioni di



      Creazione ed eliminazione


      Inserimento/estrazione di elementi in


       testa, in fondo, in una posizione data
         Tipicamente di costo O(1)


      Restituzione del numero di elementi


         Attenzione, in alcune


          implementazioni costa O(1) mentre
          in altre O(N) !
                                            22
Tipo di dato lista 2/2
       Inserimento in ordine
    


         Tipicamente a costo O(N) (per via


          della ricerca della posizione)
      Riordinamento


         Tipicamente a costo O(N logN)


    Le funzioni di libreria si occupano dei



    puntatori, il programmatore di
    preoccupa solo del campo informazione
    Ad esempio, nella libreria standard del



    C++ (non in quella del C) c'è il tipo di
    dato list, presentato in <list>
         list,
                                               23

Weitere ähnliche Inhalte

Mehr von Majong DevJfu

9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA CloudMajong DevJfu
 
8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processesMajong DevJfu
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product lineMajong DevJfu
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformationMajong DevJfu
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven ArchitectureMajong DevJfu
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture PortfolioMajong DevJfu
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural stylesMajong DevJfu
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architectureMajong DevJfu
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a productMajong DevJfu
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural stylesMajong DevJfu
 

Mehr von Majong DevJfu (20)

9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud
 
8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product line
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles
 
Uml3
Uml3Uml3
Uml3
 
Uml2
Uml2Uml2
Uml2
 
6
66
6
 
5
55
5
 
4 (uml basic)
4 (uml basic)4 (uml basic)
4 (uml basic)
 
3
33
3
 
2
22
2
 
1
11
1
 
Tmd template-sand
Tmd template-sandTmd template-sand
Tmd template-sand
 
26 standards
26 standards26 standards
26 standards
 

Kürzlich hochgeladen

Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIinfogdgmi
 

Kürzlich hochgeladen (6)

Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AI
 

17 - Programmazione: Introduzione alle liste

  • 2. Strutture dati dinamiche Vi sono problemi risolvibili  efficacemente mediante algoritmi che fanno uso di strutture dati dinamiche Ossia che cambiano  dimensione durante l'esecuzione dell'algoritmo 2
  • 3. Problema Supponiamo di dover  memorizzare e ristampare una successione di valori il cui numero non sia noto a priori Supponiamo inoltre che, oltre  ad inserirli, sia necessario di tanto in tanto estrarre alcuni elementi 3
  • 4. Array dinamico 1/2 Possibile soluzione: array  dinamico riallocato ogni volta che si renda necessario Ogni riallocazione ha costo O(N)  Bisogna ricopiare tutti i valori  nella nuova locazione Comunque si fa “ogni tanto”,  per cui l'inserimento ha costo ammortizzato O(1) O(1 4
  • 5. Array dinamico 2/2 Però ad ogni estrazione di un  elemento che non sia l'ultimo bisogna ricompattare l'array Questo costa O(N) tutte le volte  5
  • 6. Domanda Vi viene in mente una soluzione  migliore? 6
  • 7. Proposta Perché ogni volta che dobbiamo  aggiungere un elemento non lo allochiamo in memoria da solo? Se e quando dobbiamo estrarlo  lo deallochiamo, di nuovo da solo 7
  • 8. Problemi Dove memorizziamo l'indirizzo  dei vari elementi? Cominciamo dal primo ...  8
  • 9. Puntatore al primo elemento Potremmo memorizzare in una  variabile di tipo puntatore l'indirizzo di tale elemento 9
  • 10. Puntatore al primo elemento Supponiamo che il primo valore sia 5  Allochiamo in memoria spazio per  un intero e memorizziamo il valore Memorizziamone l'indirizzo in una  variabile p di tipo puntatore 10
  • 11. Puntatore al primo elemento Indirizzo 5 primo p elemento Oggetto dinamico Variabile locale o globale: oggetto automatico o statico 11
  • 12. Elementi successivi Supponiamo di inserire un altro  valore, diciamo 7 Come facciamo per  memorizzare l'indirizzo del prossimo elemento, ed in generale di tutti i successivi elementi? 12
  • 13. Puntatore al successivo Per ciascun valore, potremmo  allocare spazio in memoria sia per il valore dell'elemento,  che per un puntatore che  punti al prossimo elemento Così, una volta raggiunto un  elemento, abbiamo le informazioni necessarie per accedere al prossimo 13
  • 14. Puntatore al successivo 5 Indirizzo 7 Indirizzo prossimo prossimo elemento elemento ? Indirizzo Oggetti dinamici primo p elemento Variabile locale o globale: oggetto automatico o statico 14
  • 15. Ultimo elemento 1/2 L'elemento contenente il valore  7 è attualmente l'ultimo (ce ne sono solo due) Cosa conterrà il puntatore  all'interno della struttura che lo rappresenta? Come facciamo a dire che non  ci sono altri elementi dopo di lui? 15
  • 16. Ultimo elemento 2/2 Possiamo assegnargli il valore 0  (NULL) 5 Indirizzo 7 0 prossimo elemento Indirizzo primo p elemento Abbiamo costruito un oggetto di  tipo lista concatenata 16
  • 17. Lista concatenata Struttura dati i cui  oggetti/elementi sono disposti in ordine lineare Diversamente dall'array, in cui  l'ordine è determinato dagli indici, l'ordine in una lista concatenata è determinato da un puntatore in ogni oggetto 17
  • 18. Terminologia 1/2 Diremo che ciascun elemento  contiene un campo informazione ed uno o due campi puntatore Il primo elemento di una lista è  tipicamente chiamato testa (head) della lista head) L'ultimo elemento è tipicamente  chiamato coda (tail) della lista (tail) 18
  • 19. Terminologia 2/2 Lista singolarmente concatenata o  semplice: ciascun elemento semplice: contiene solo un puntatore al prossimo elemento Lista doppiamente concatenata o  doppia: ciascun elemento contiene doppia: sia un puntatore al prossimo elemento che un puntatore all'elemento precedente 19
  • 20. Lista semplice 1/2 Ciascun elemento contiene solo un  puntatore al prossimo elemento inf Indir. inf Indir. inf ... pross. pross. 0 elem. elem. Indirizzo Testa Coda testa della lista Puntatore alla lista 20
  • 21. Lista semplice 2/2 Il puntatore al prossimo elemento  della coda della lista contiene il valore 0 (NULL) Il puntatore alla testa della lista  individua la lista stessa  E' perciò chiamato anche puntatore alla lista 21
  • 22. Tipo di dato lista 1/2 Esistono varie librerie che forniscono il  tipo di dato lista Vengono fornite le operazioni di   Creazione ed eliminazione  Inserimento/estrazione di elementi in testa, in fondo, in una posizione data  Tipicamente di costo O(1)  Restituzione del numero di elementi  Attenzione, in alcune implementazioni costa O(1) mentre in altre O(N) ! 22
  • 23. Tipo di dato lista 2/2 Inserimento in ordine   Tipicamente a costo O(N) (per via della ricerca della posizione)  Riordinamento  Tipicamente a costo O(N logN) Le funzioni di libreria si occupano dei  puntatori, il programmatore di preoccupa solo del campo informazione Ad esempio, nella libreria standard del  C++ (non in quella del C) c'è il tipo di dato list, presentato in <list> list, 23