DIPARTIMENTO   DI   INFORMATICA
Università di Torino

Lezione di Venerdi' 1/2/02 - ultimo aggiornamento: 7/2/02

Ancora liste linkate.

CHE COSA E' STATO FATTO A LEZIONE

Funzioni sulle liste che non rientrano perfettamente nello "schema generale di visita" presentato la lezione precedente

Altra versione della funzione "findnth" in [NOTE1:pag. 12]. (NOTATE CHE QUESTA VERSIONE E' UNA SPECIALIZZAZIONE DELLO "SCHEMA GENERALE DI VISITA")

/*
  AI: "lis" e' il puntatore ad una lista L e "occ" contiene N (>=1)
  AF: Restituisce: 
      - un puntatore al nodo di L che contiene l'"occ"-esima occorrenza 
        di "x",
      - NULL se un tale nodo non esiste 
        (cioe' se "x" occorre meno di "occ" volte in L)
*/
  
node *findnth1 (int x, int occ, node *lis)
{
  node* punt = NULL;

  /*
    IC: (Tutti nodi di L dal primo a quello puntato da "lis" escluso
         contengono N-"occ" occoprrenze di "x")
        AND
        (se "punt" != NULL allora "punt" punta 
         all'N-esimo nodo di L che contiene "x")
  */
  while ((lis!=NULL) && (occ != 0))
  {  
     if (lis->data == x) 
        {  occ--; 
           if (occ == 0) punt=lis;
        }
     lis=lis->next;
   } 

  return punt;
}

Altra versione della funzione "findpred" in [NOTE1:pag. 12]. (questa NON e' una specializzazione dello "schema generale di visita", pero' e' "molto simile" ad esso)

/*
  AI: "lis" e' il puntatore ad una lista L
  AF: Restituisce: 
      - un puntatore al nodo di L che precede la prima occorrenza di "x",
      - NULL se un tale nodo non esiste 
        (cioe' se "x" occorre al primo posto in L, o non occorre in L)
*/
  
node *findpred1 (int x, node *lis)
{
  if (lis==NULL) return NULL;

  if (lis->data==x) return NULL;

  /*
    IC: Tutti nodi di L dal primo a quello puntato da "lis" incluso
        non contengono "x"
  */
  while ((lis->next != NULL) && (lis->next->data !=x))
     lis=lis->next;

  if (lis->next!=NULL) return lis;
  else return NULL;
}

Funzioni che modificano su una lista modificandone i link

COSA SI DEVE LEGGERE
  • [NOTE1: pag. 14-15]

ESERCIZI DA SVOLGERE
  • Simulare l'esecuzione delle funzioni "findnth1" e "findpred1" sviluppate in precedenza sviluppate in precedenza.
  • Confrontate il codice della funzione "findnth1" con il codice della funzione "findnth" a pag. 12. Quale dei due codici e' piu' "facile da capire"? Quale insegnamento si puo' ricavare da questo esempio?



[Ferruccio Damiani - DIDATTICA] [Corsi di Studi in Informatica]

Last update: Feb 12, 2002