Logo dell'Università di Catania: Siciliae Studium Generale 1434 Logo del Centro IPPARI, Programmazione
matite e gomma
Loghi istituzionali: Siciliae Studium Generale 1434, Centro ricerche IPPARI, Università di Catania, Facoltà di Scienze Matematiche, Fisiche, Naturali, Insegnamento di Programmazione

Allocazione di memoria per le liste

Lezione 10 di Programmazione 2

Docente: Giuseppe Scollo

Università di Catania, sede di Comiso (RG)
Facoltà di Scienze Matematiche, Fisiche e Naturali
Corso di Studi in Informatica applicata, AA 2007-8

Logo di Conformità WCAG-1 di Livello Tripla A, W3C-WAI Web Content Accessibility Guidelines 1.0 Validazione XHTML 1.0 Validazione CSS 2

Indice

  1. Allocazione di memoria per le liste
  2. allocazione di memoria per le liste
  3. un'implementazione delle liste
  4. implementazione delle liste in C++
  5. esercizi

allocazione di memoria per le liste

come si è visto nella lezione precedente, allocazione e rilascio della memoria per ciascun nodo di una lista concatenata possono effettuarsi invocando le funzioni di libreria new e delete, rispettivamente

negli algoritmi in cui si eseguono spesso operazioni di inserimento e rimozione di nodi in una lista, può risultare conveniente preallocare una quantità di memoria sufficiente, e quindi gestire localmente la memoria associata a tali operazioni, trasferendo i nodi fra la lista in gioco e la lista libera, cioè una lista di nodi disponibili per l'allocazione locale

con riferimento all'interfaccia Lista.h proposta nella lezione precedente:

un'implementazione delle liste

per implementare in C++ l'interfaccia Lista.h con gestione locale della memoria, come indicato sopra, si possono adottare le seguenti scelte:

implementazione delle liste in C++

Lista.c++ :

esercizi

  1. modificare l'implementazione della funzione newNode qui proposta per evitare l'errore in cui incorre se il client la invoca quando la lista libera è vuota
    • N.B. la funzione modificata deve restituire il puntatore nullo in tal caso, ma senza incorrere in errore
  2. esercizio 3.49 nel testo (Sedgewick, 2003), p.110: implementare l'interfaccia Lista.h usando direttamente  new  e  delete  risp. in  newNode  e  deleteNode
  3. esercizio 3.50 nel testo (Sedgewick, 2003), p.110: eseguire studi empirici che confrontino i tempi di esecuzione delle funzioni di allocazione di memoria nelle due implementazioni dell'interfaccia Lista.h, cioè quella con preallocazione e gestione locale della memoria qui proposta e quella prodotta nell'esercizio precedente, usando a tal fine il client per il problema di Giuseppe Flavio proposto nella lezione precedente, con M = 2 e N = 103, 104, 105, 106
    • N.B. in ambiente Unix, se <comando> è un comando eseguibile (inclusi eventuali parametri da linea di comando), allora time <comando> lo esegue e, al termine della sua esecuzione, ne fornisce misure di tempo di esecuzione (quella rilevante all'esercizio è usr+sys, si consulti man time per dettagli)