Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D Le Miniguide all'orientamento Gli eBook di Federica La Corte in Rete
 
I corsi di Scienze Matematiche Fisiche e Naturali
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Aniello Murano » 8.Esercitazione di laboratorio su Liste Puntate Semplici


Liste puntate (remind)

Una lista puntata (semplice) ha una gestione sequenziale: gli elementi si possono scorrere in un unico verso. Inoltre, nella lista è sempre possibile individuare un primo elemento (testa) e un ultimo elemento (coda)-

Liste puntate (remind)

Liste puntate (remind)


Operazioni sulle liste

Nella precedente lezione abbiamo visto l’implementazione delle seguenti operazioni su liste

  • Inizializzazione
  • Inserimento in coda
  • Verifica lista vuota
  • Stampa lista

Oggi implementeremo inoltre le seguenti operazioni

  • Ricerca elemento
  • Inserimento elemento
  • Cancellazione di un elemento

Esercizio I: Ricerca di un elemento

Sia L una lista definita da

struct lista {int val; struct lista *next;} L;

Scrivere in linguaggio C una funzione ricorsiva che preso in input L e un intero el, verifichi se esiste una occorrenza di el nella lista

Idea per la soluzione dell’esercizio:

Scorrere in avanti la lista in chiamate ricorsive e

  • Se L=NULL, ritornare 0
  • se L_val=el, ritornare 1

altrimenti, ritornare il risultato della chiamata ricorsiva su L->next

Esercizio II: Rimozione di un elemento

Sia L una lista definita da

struct lista {int val; struct lista *next;} L;

Scrivere in linguaggio C una funzione ricorsiva che preso in input L e un intero el, rimuova una ricorrenza di el dalla lista (se ne esiste una).

Idea per la soluzione dell’esercizio:

Scorrere in avanti la lista in chiamate ricorsive e

  • se L=NULL, ritornare L
  • se L_val=el, settare L=L_next e ritornare L
  • altrimenti, associare a L_next il risultato della chiamata ricorsiva su L_ next e al ritorno dalla chiamata ricorsiva restituire L.

Esercizio III: Aggiunta di un elemento

Sia L una lista definita da

struct lista {int val; struct lista *next;} L;

Scrivere in linguaggio C una funzione ricorsiva che preso in input L, la modifichi in modo tale che ogni numero dispari sia seguito dal suo successore pari.

Idea per la soluzione dell’esercizio:

  • Dapprima scorrere la lista fino alla coda conchiamate ricorsive
  • Condizione di uscita: Se L=NULL, ritornare L

Al ritorno dalle chiamate ricorsive:

  • Se L_val è disapri aggiungere un nuovo nodo tra L e L->next. Attenzione qui a sistemare tutti i collegamenti!!!

Ritornare la lista L.

Esercizio completo (da consegnare)

Si implementi in linguaggio C un menù di scelta multipla per la gestione “con funzioni ricorsive” di tutte le operazioni viste in precedenza. Dunque il menù permettere le seguenti operazioni:

  • Creazione di una lista a puntatori (con il comando struct) e successivo riempimento della lista con n elementi dati in input
  • Stampa della lista
  • Ricerca di un elemento,
  • inserimento (in coda o dopo un elemento specifico)
  • rimozione della prima occorrenza di un elemento dato in input
  • Ricerca e stampa del massimo e del minimo della lista

L’esercizio completo va consegnato via mail al tutor entro 5 giorni lavorativi.

  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion