Le Liste. Elisa Marengo. Università degli Studi di Torino Dipartimento di Informatica. Elisa Marengo (UNITO) Le Liste 1 / 31



Documenti analoghi
La struttura dati ad albero binario

Gestione dinamica di una pila

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Laboratorio di Algoritmi e Strutture Dati

Sottoprogrammi: astrazione procedurale

Laboratorio di Algoritmi e Strutture Dati

Compito di Fondamenti di Informatica

Laboratorio di programmazione

Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente.

Algoritmi di Ricerca. Esempi di programmi Java

Appello di Informatica B

Algoritmi e Strutture Dati

Allocazione dinamica della memoria - riepilogo

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Esercitazione 6. Tutor: Ing. Diego Rughetti. Anno Accademico 2007/2008

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

obiettivi di questa seconda metà del corso fare un passo avanti rispetto a :... meccanismi di composizione dei dati

ESERCIZIO 1 (Definizione funzioni passaggio parametri per copia)

Funzioni in C. Violetta Lonati

costruttori e distruttori

Il tipo di dato astratto Pila

INFORMATICA 1 L. Mezzalira

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella

Tipi di Dato Ricorsivi

Gest ione di list e in C

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 21 Dicembre 2006

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30'

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Programmazione I / Informatica generale Prova scritta 11 Giugno 2008

I puntatori e l allocazione dinamica di memoria

PROGRAMMAZIONE AVANZATA JAVA E C. Massimiliano Redolfi. Lezione 7: Code, Stack, Liste PAJC. Ricerca. prof. Massimiliano Redolfi PAJC

LISTE, INSIEMI, ALBERI E RICORSIONE

Laboratorio di Algoritmi e Strutture Dati

GESTIONE INFORMATICA DEI DATI AZIENDALI

Laboratorio di Algoritmi e Strutture Dati

Gestione dei File in C

Programmazione. Laboratorio. Roberto Cordone DI - Università degli Studi di Milano

Breve riepilogo della puntata precedente:

Corso di Fondamenti di Informatica II

Verifica che una grammatica sia Context Free nel GrammaReader

10 - Programmare con gli Array

Laboratorio di Programmazione

SISTEMI OPERATIVI 3 febbraio 2014 corso A nuovo ordinamento e parte di teoria del vecchio ordinamento indirizzo SR

PROGRAMMI LINGUAGGIO C

1: /* Nome del programma: gestione_articoli_01.cpp 2: Realizzato da: Gaetano Della Cerra 3: Data: 06/02/ III Informatica Serale I.T.I.S.

Esercizio: gestione di un conto corrente

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1

Dipartimento di Sistemi e Informatica Università degli Studi di Firenze. Dev-C++ Ing. Michele Banci 27/03/2007 1

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO XI.2015

Informatica A aa Seconda prova in itinere. Esempi di esercizi possibili

Informatica 3. Informatica 3. LEZIONE 12: Liste. Lezione 12 - Modulo 1. Posizione corrente. Introduzione

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO V Indice

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

Esercizio 1. Esercizio 1

puntatori Lab. Calc. AA 2007/08 1

Definizione di classi con array di oggetti

FONDAMENTI di INFORMATICA L. Mezzalira

Lezione 9: Strutture e allocazione dinamica della memoria

Utilizzo e scrittura di classi

Implementazione dell albero binario in linguaggio C++

INFORMATICA - I puntatori Roberta Gerboni

esercizi Esercizi / problemi

Le operazioni di allocazione e deallocazione sono a carico del sistema.

Laboratorio di Informatica

Le stringhe. Le stringhe

RICERCA DI UN ELEMENTO

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

SOCIETA COMUNICAZIONE DI AGGIUNTA ATTIVITA PRESSO LA SEDE (S5) L ATTIVITA E SVOLTA DAL LEGALE RAPPRESENTANTE E DA ALTRO SOGGETTO

Calcolare il massimo di una lista

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Primo scritto 11 Gennaio 2008

Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a luglio 2013

Esercitazioni di Prog. II (funzioni su insiemi) Chiara Petrioli

Programmazione 1 A.A. 2015/2016

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 4A di Martedì 21 Giugno 2011 tempo a disposizione 2h

SAPIENZA Università di Roma, Facoltà di Ingegneria

Lezione 4 Le code. Informatica. 26 Aprile Le pizze devono essere preparate e consegnate seguendo l ordine di arrivo degli ordini

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2011

Introduzione al Linguaggio C

Esempio: dest = parolagigante, lettere = PROVA dest (dopo l'invocazione di tipo pari ) = pprrlogvgante

Utilizzo della chiavetta SE 50UMTS per la navigazione Web tramite PC

Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 17 Dicembre 2005

Corso di Fondamenti di Informatica

Fondamenti di Informatica 2

MANUALE BREVE PER IL DOCENTE TUTOR

SOCIETA COMUNICAZIONE DI AGGIUNTA ATTIVITA PRESSO LA SEDE (S5) L ATTIVITA E SVOLTA DAL SOLO LEGALE RAPPRESENTANTE

Per visualizzare e immettere i dati in una tabella è possibile utilizzare le maschere;

Istruzioni per la compilazione di una domanda di assegnazione carburante

ESAME SCRITTO DI ELEMENTI DI INFORMATICA E PROGRAMMAZIONE. 9 Settembre 2015

(1) - - (4) R4 = R7 * R7 (4) (2) (3) 5 - (4) rinviata perché in WAW con (3) 6 (3) e (4) ritirabili ma attendono il completamento di (2) (2) (3) (4)

ESAME SCRITTO DI ELEMENTI DI INFORMATICA E PROGRAMMAZIONE. 10 Settembre 2013

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Algoritmi di ordinamento

OTTAVA ESPERIENZA DI LABORATORIO. L elaborazione dei files in C

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Transcript:

Le Liste Elisa Marengo Università degli Studi di Torino Dipartimento di Informatica Elisa Marengo (UNITO) Le Liste 1 / 31

Cos è una Lista Una lista è una collezione di elementi omogenei che: potrebbero non essere allocati in modo contiguo; il cui numero non è noto a priori e può variare durante l esecuzione del programma Si noti la differenza con gli array. Elisa Marengo (UNITO) Le Liste 2 / 31

Come si rappresenta una lista? Ogni elemento della lista: può contenere una o più informazioni memorizzate in campi contiene necessariamente un puntatore che lo lega all elemento successivo della lista Elisa Marengo (UNITO) Le Liste 3 / 31

Definizione di una lista Elemento struct elemento { int inf ; elemento * next ; ; inf contiene un valore intero (un informazione) next contiene il riferimento al prossimo elemento nella lista il campo next dell ultimo elemento sarà 0 (null); puntatore a struttura elemento altrimenti. Elisa Marengo (UNITO) Le Liste 4 / 31

Definizione di una lista Lista elemento * lista ; lista = new elemento ; Una lista è il puntatore al primo elemento della lista Se la lista è vuota il puntatore sarà nullo (0) Elisa Marengo (UNITO) Le Liste 5 / 31

Memorizzazione e Lettura di una lista Gli elementi di una lista Potrebbero non essere memorizzati in modo contiguo; Per scorrere una lista bisogna scorrere ogni elemento usando un puntatore; L ultimo elemento della lista è quello il cui puntatore all elemento successivo è null; Elisa Marengo (UNITO) Le Liste 6 / 31

Memorizzazione e Lettura di una lista Gli elementi di una lista Potrebbero non essere memorizzati in modo contiguo; Per scorrere una lista bisogna scorrere ogni elemento usando un puntatore; L ultimo elemento della lista è quello il cui puntatore all elemento successivo è null; Elisa Marengo (UNITO) Le Liste 7 / 31

Memorizzazione e Lettura di una lista Gli elementi di una lista Potrebbero non essere memorizzati in modo contiguo; Per scorrere una lista bisogna scorrere ogni elemento usando un puntatore; L ultimo elemento della lista è quello il cui puntatore all elemento successivo è null; Elisa Marengo (UNITO) Le Liste 8 / 31

Programma sulle liste Scrivere un programma che 1 permetta di memorizzare una lista composta di interi, chiedendo i dati da inserire all utente; 2 stampi gli elementi che compongono la lista. Elisa Marengo (UNITO) Le Liste 9 / 31

Programma sulle liste struct elemento { int inf ; elemento * next ; ; // Prototipi delle funzioni elemento * crea_ lista (); void visualizza_ lista ( elemento *); main (){ elemento * lista = crea_ lista (); visualizza_ lista ( lista ); Elisa Marengo (UNITO) Le Liste 10 / 31

Creazione della lista elemento c r e a l i s t a (){ elemento p, punt ; i n t n ; cout<< I n s e r i r e i l numero d i e l e m e n t i ; cin>>n ; i f ( n==0){ p = 0 ; // l i s t a vuota e l s e { // primo e l emento p = new elemento ; c i n>>p >i n f ; punt=p ; // e l e m e n t i r e s t a n t i f o r ( i n t i =2; i<=n ; i ++){ punt >next = new elemento ; punt = punt >next ; c i n>>punt >i n f ; punt >n e x t = 0 ; r e t u r n p ; Elisa Marengo (UNITO) Le Liste 11 / 31

Creazione della lista elemento c r e a l i s t a (){ elemento p, punt ; i n t n ; cout<< I n s e r i r e i l numero d i e l e m e n t i ; cin>>n ; i f ( n==0){ p = 0 ; // l i s t a vuota e l s e { // primo elemento p = new elemento ; c i n>>p >i n f ; punt=p ; // e l e m e n t i r e s t a n t i f o r ( i n t i =2; i<=n ; i ++){ punt >next = new elemento ; punt = punt >next ; c i n>>punt >i n f ; punt >n e x t = 0 ; r e t u r n p ; Elisa Marengo (UNITO) Le Liste 12 / 31

Creazione della lista elemento c r e a l i s t a (){ elemento p, punt ; i n t n ; cout<< I n s e r i r e i l numero d i e l e m e n t i ; cin>>n ; i f ( n==0){ p = 0 ; // l i s t a vuota e l s e { // primo elemento p = new elemento; c i n>>p >i n f ; punt=p ; // e l e m e n t i r e s t a n t i f o r ( i n t i =2; i<=n ; i ++){ punt >next = new elemento ; punt = punt >next ; c i n>>punt >i n f ; punt >n e x t = 0 ; r e t u r n p ; Elisa Marengo (UNITO) Le Liste 13 / 31

Creazione della lista elemento c r e a l i s t a (){ elemento p, punt ; i n t n ; cout<< I n s e r i r e i l numero d i e l e m e n t i ; cin>>n ; i f ( n==0){ p = 0 ; // l i s t a vuota e l s e { // primo elemento p = new elemento ; cin>> p > inf; punt=p ; // e l e m e n t i r e s t a n t i f o r ( i n t i =2; i<=n ; i ++){ punt >next = new elemento ; punt = punt >next ; c i n>>punt >i n f ; punt >n e x t = 0 ; r e t u r n p ; Elisa Marengo (UNITO) Le Liste 14 / 31

Creazione della lista elemento c r e a l i s t a (){ elemento p, punt ; i n t n ; cout<< I n s e r i r e i l numero d i e l e m e n t i ; cin>>n ; i f ( n==0){ p = 0 ; // l i s t a vuota e l s e { // primo elemento p = new elemento ; c i n>>p >i n f ; punt=p; // e l e m e n t i r e s t a n t i f o r ( i n t i =2; i<=n ; i ++){ punt >next = new elemento ; punt = punt >next ; c i n>>punt >i n f ; punt >n e x t = 0 ; r e t u r n p ; Elisa Marengo (UNITO) Le Liste 15 / 31

Creazione della lista elemento c r e a l i s t a (){ elemento p, punt ; i n t n ; cout<< I n s e r i r e i l numero d i e l e m e n t i ; cin>>n ; i f ( n==0){ p = 0 ; // l i s t a vuota e l s e { // primo elemento p = new elemento ; c i n>>p >i n f ; punt=p ; // e l e m e n t i r e s t a n t i f o r ( i n t i =2; i<=n ; i ++){ punt >next = new elemento; punt = punt >next ; c i n>>punt >i n f ; punt >n e x t = 0 ; r e t u r n p ; Elisa Marengo (UNITO) Le Liste 16 / 31

Creazione della lista elemento c r e a l i s t a (){ elemento p, punt ; i n t n ; cout<< I n s e r i r e i l numero d i e l e m e n t i ; cin>>n ; i f ( n==0){ p = 0 ; // l i s t a vuota e l s e { // primo elemento p = new elemento ; c i n>>p >i n f ; punt=p ; // e l e m e n t i r e s t a n t i f o r ( i n t i =2; i<=n ; i ++){ punt >next = new elemento ; punt = punt > next; c i n>>punt >i n f ; punt >n e x t = 0 ; r e t u r n p ; Elisa Marengo (UNITO) Le Liste 17 / 31

Creazione della lista elemento c r e a l i s t a (){ elemento p, punt ; i n t n ; cout<< I n s e r i r e i l numero d i e l e m e n t i ; cin>>n ; i f ( n==0){ p = 0 ; // l i s t a vuota e l s e { // primo elemento p = new elemento ; c i n>>p >i n f ; punt=p ; // e l e m e n t i r e s t a n t i f o r ( i n t i =2; i<=n ; i ++){ punt >next = new elemento ; punt = punt > next ; cin >> punt > inf; punt >n e x t = 0 ; r e t u r n p ; Elisa Marengo (UNITO) Le Liste 18 / 31

Creazione della lista elemento c r e a l i s t a (){ elemento p, punt ; i n t n ; cout<< I n s e r i r e i l numero d i e l e m e n t i ; cin>>n ; i f ( n==0){ p = 0 ; // l i s t a vuota e l s e { // primo elemento p = new elemento ; c i n>>p >i n f ; punt=p ; // e l e m e n t i r e s t a n t i f o r ( i n t i =2; i<=n ; i ++){ punt >next = new elemento ; punt = punt > next ; c i n>>punt >i n f ; punt >n e x t = 0 ; r e t u r n p ; Elisa Marengo (UNITO) Le Liste 19 / 31

Creazione della lista elemento c r e a l i s t a (){ elemento p, punt ; i n t n ; cout<< I n s e r i r e i l numero d i e l e m e n t i ; cin>>n ; i f ( n==0){ p = 0 ; // l i s t a vuota e l s e { // primo elemento p = new elemento ; c i n>>p >i n f ; punt=p ; // e l e m e n t i r e s t a n t i f o r ( i n t i =2; i<=n ; i ++){ punt >next = new elemento ; punt = punt > next ; c i n>>punt >i n f ; punt > next = 0; r e t u r n p ; Elisa Marengo (UNITO) Le Liste 20 / 31

Visualizzazione della lista void v i s u a l i z z a l i s t a ( elemento p ){ cout<< L i s t a : ; w h i l e ( p!=0){ cout<<p >i n f << ; p = p >n e x t ; cout<<e n d l ; Elisa Marengo (UNITO) Le Liste 21 / 31

Esercizio Scrivere Una funzione che cancella da una lista la prima occorrenza di un elemento. Per farlo avvalersi di una funzione che: Riceve come parametro la lista e l elemento da cercare; Restituisce il puntatore all elemento da cancellare e il puntatore all elemento precedente. Elisa Marengo (UNITO) Le Liste 22 / 31

Cancellare elementi Elisa Marengo (UNITO) Le Liste 23 / 31

Cancellare elementi Elisa Marengo (UNITO) Le Liste 24 / 31

Cancellare elementi e lemento c e r c a v a l o r e ( e l emento p, int dato, e lemento &p r e c ){ b o o l t r o v a t o =f a l s e ; while ( p!=0 &&! t r o v a t o ){ i f ( p >i n f = = dato ){ t r o v a t o = t r u e ; else { p r e c =p ; p = p >n e x t ; return p ; Elisa Marengo (UNITO) Le Liste 25 / 31

Cancellare elementi e lemento c a n c e l l a e l e m e n t o ( elemento l i s t a, int dato ){ e lemento p r e c e d e n t e = 0 ; e lemento d a c a n c e l l a r e = c e r c a v a l o r e ( l i s t a, dato, p r e c e d e n t e ) ; i f ( d a c a n c e l l a r e!=0){ i f ( p r e c e d e n t e!= 0){ p r e c e d e n t e >n e x t=d a c a n c e l l a r e >n e x t ; else { l i s t a =l i s t a >n e x t ; d e l e t e d a c a n c e l l a r e ; return l i s t a ; Elisa Marengo (UNITO) Le Liste 26 / 31

Cancellare elementi main ( ) { int dato ; e lemento l i s t a = c r e a l i s t a ( ) ; v i s u a l i z z a l i s t a ( l i s t a ) ; cout<< I n s e r i r e elemento da c a n c e l l a r e ; c i n >>dato ; l i s t a = c a n c e l l a e l e m e n t o ( l i s t a, dato ) ; v i s u a l i z z a l i s t a ( l i s t a ) ; Elisa Marengo (UNITO) Le Liste 27 / 31

Inserire elementi Elisa Marengo (UNITO) Le Liste 28 / 31

Inserire elementi Elisa Marengo (UNITO) Le Liste 29 / 31

Inserire elementi Elisa Marengo (UNITO) Le Liste 30 / 31

Inserire elementi elemento i n s e r i s c i p o s i z i o n e ( elemento l i s t a, i n t p o s i z i o n e, i n t dato ){ elemento nuovo = new elemento ; nuovo >i n f = dato ; elemento temp = l i s t a ; i n t i =2; i f ( p o s i z i o n e == 1){ nuovo >n e x t= l i s t a ; l i s t a =nuovo ; e l s e { cout<< I n i z i o i l w h i l e <<e n d l ; w h i l e ( i<p o s i z i o n e && temp >n e x t!=0){ temp=temp >next ; i ++; nuovo >next=temp >next ; temp >n e x t=nuovo ; r e t u r n l i s t a ; Elisa Marengo (UNITO) Le Liste 31 / 31