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

Elaborazione elementare delle liste

Lezione 9 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. Elaborazione elementare delle liste
  2. inversione di una lista
  3. ordinamento per inserzione su una lista
  4. testa e coda in liste concatenate
  5. liste doppiamente concatenate
  6. un'interfaccia per liste concatenate
  7. client per il problema di Giuseppe Flavio
  8. esercizi

inversione di una lista

problema: codificare una funzione che, dato il puntatore ad una lista, la modifichi invertendo l'ordine dei suoi nodi, e restituisca quindi il puntatore alla lista così invertita

ordinamento per inserzione su una lista

problema: codificare una funzione che, dato il puntatore ad una lista di interi non negativi, costruisca una lista di ugual dimensione, con gli stessi valori degli elementi ma ordinati per valori crescenti, e restituisca quindi il puntatore alla lista ordinata così costruita

testa e coda in liste concatenate

come può constatarsi negli esempi precedenti, algoritmi diversi rendono convenienti convenzioni diverse per la rappresentazione della testa e della coda della lista:

in base a tali scelte:

liste doppiamente concatenate

per alcune applicazioni è utile poter scorrere una lista in entrambe le direzioni: nelle liste doppiamente concatenate, o liste doppie, ogni nodo ha un link al suo successore e uno al suo predecessore:

la disponibilità dei due link permette la rimozione di un nodo specificando il suo puntatore:

un'interfaccia per liste concatenate

Lista.h :

client per il problema di Giuseppe Flavio

ecco come si può riformulare il programma per il problema di Giuseppe Flavio usando l'interfaccia Lista.h:

esercizi

  1. la seguente definizione di funzione per l'inversione di una lista concatenata non è equivalente a quella data sopra, ed anzi è erronea: perché?
    nlink reverse (nlink x)
    { nlink y = x, r = 0, t = x->next; 
      while (y != 0)
      { y->next = r; r = y; y = t; t = y->next;}
      return r;
    }
    
  2. la definizione di funzione per l'ordinamento di una lista di interi qui proposta, a differenza del programma 3.11 proposto nel testo (Sedgewick, 2003), p.100, è priva di effetti collaterali, cioè non modifica la lista argomento; per verificarlo:
    • modificare il programma 3.11 per produrre in output, dopo l'ordinamento, sia la lista ordinata sia quella a cui si accede dalla testa della lista originaria, e
    • scrivere un programma che generi una lista con valori casuali degli elementi, quindi usi la funzione insord qui proposta per l'ordinamento, e infine produca in output le due liste