Dispensa 18 CORSO DI PROGRAMMAZIONE A.A CORSO DI LAUREA IN INGEGNERIA E SCIENZE INFORMATICHE CESENA. Laboratori

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Dispensa 18 CORSO DI PROGRAMMAZIONE A.A CORSO DI LAUREA IN INGEGNERIA E SCIENZE INFORMATICHE CESENA. Laboratori"

Transcript

1 ORSO I LURE IN INGEGNERI E SIENZE INFORMTIHE ESEN ORSO I PROGRMMZIONE ispensa 18 Laboratori ott. Mirko Ravaioli mirko.ravaioli@unibo.it

2 orso di Programmazione ispensa 18 Liste Inserimento in onsiderando le seguenti strutture dati e variabili: struct cella{ char valore; struct cella *next; }; struct cella * = ; ove cella è la struttura che definisce come è fatto ogni elemento della lista, è il puntatore al primo elemento della lista ( mantiene l indirizzo di memoria della prima cella in lista). ttraverso una chiamata alla funzione malloc() allochiamo in memoria lo spazio necessario per mantenere la nuova cella da inserire all interno della lista: 1 = (struct cella*)malloc(sizeof(struct cella)); Pagina 2 di 49

3 orso di Programmazione ispensa 18 è un puntatore ad un elemento di tipo struct cella allo stesso modo di, la funzione malloc() restituisce l indirizzo di memoria della prima cella allocata, tale indirizzo viene memorizzato all interno della variabile (puntatore). La prima operazione da compiere è collegare la nuova cella alla prima della lista, quindi fare in modo che l elemento next della nuova cella prenda lo stesso valore di : 2 ->next = ; La seconda operazione consiste nell associare la al elemento creato: 3 = ; In modo da ottenere l inserimento del elemento in : 4 Pagina 3 di 49

4 orso di Programmazione ispensa 18 Se non si seguono esattamente nell ordine indicato i passi indicati in precedenza e ad esempio come primo passo si associa la della lista al elemento: ERRORE! se fatto come primo passo si perde il riferimento al resto della lista! Si perde il riferimento al resto della lista quindi non sarà possibile collegare il elemento con il resto della lista! Riassumendo il codice necessario per l inserimento di un elemento in lista: = (struct cella*)malloc(sizeof(struct cella)); ->next = ; = ; Le istruzioni descritte funzionano anche considerando una lista vuota: 1 = (struct cella*)malloc(sizeof(struct cella)); Pagina 4 di 49

5 orso di Programmazione ispensa >next = ; 3 = ; 4 Pagina 5 di 49

6 orso di Programmazione ispensa 18 Stampa degli elementi il lista onsiderando la struttura dati e le variabili definite nel punto precedente, la stampa consiste nel accedere ad ogni elemento della lista partendo dal primo elemento in. 1 con ->valore si accede alla proprietà della prima cella Per poter leggere i valori nella seconda cella bisogna accedere a tale cella: 2 = ->next permette di passare alla cella successiva dopo aver eseguito = ->next si ottiene: ora con ->valore è possibile accede alla proprietà della seconda cella si procede eseguendo nuovamente = ->next per accedere alla terza cella: Pagina 6 di 49

7 orso di Programmazione ispensa 18 = ->next permette di passare alla cella successiva 3 ora con ->valore è possibile accede alla proprietà della terza cella Ripetendo le operazioni viste nei punti precedenti si accede alla fine della lista: 4 Pagina 7 di 49

8 orso di Programmazione ispensa 18 Quindi la logica è quella di accedere a tutti gli elementi della lista fino a quando non si arriva alla fine della lista e cioè al valore. Quindi riassumendo il codice potrebbe essere: while (!= ) { printf( %d, ->valore); tesa = ->next; } Procedendo in questo modo però dopo aver stampato la lista si perde il riferimento al primo elemento della lista, e quindi alla lista intera! Quindi prima di scorrere la lista bisognerebbe tener traccia del primo elemento attraverso un altro puntatore: temp 1 temp = ; 2 temp = temp->next; temp Pagina 8 di 49

9 orso di Programmazione ispensa 18 3 temp = temp->next; temp 4 temp = temp->next; temp Pagina 9 di 49

10 orso di Programmazione ispensa 18 In questo modo arrivati alla fine della lista il riferimento al primo elemento non è andato perso. on l istruzione temp = si riesce a ripristinare lo stato iniziale. temp = ; while (!= ) { printf( %d, ->valore); = ->next; } = temp; E preferibile muoversi all interno della lista (scorrere la lista) con un puntatore diverso dalla e non con il riferimento alla (così si evita di dimenticarsi di tener traccia del primo elemento!!) temp = ; while (temp!= ) { printf( %d, temp->valore); temp = temp ->next; } In questo modo dopo aver eseguito la stampa il riferimento alla non è stato modificato! Pagina 10 di 49

11 orso di Programmazione ispensa 18 Ricerca di un elemento in lista La ricerca è simile alla stampa: bisogna scorrere la lista fino ad individuare l elemento cercato: temp = ; trovato = 0; while (temp!= ) { if (temp->valore = valoreaercare) { trovato = 1; break; } temp = temp ->next; } if (trovato) printf( Il valore cercato è presente in lista! ); else printf( valore NON trovato ); ll interno dell analisi della lista (dentro al ciclo while) attraverso un controllo con un istruzione if è possibile valutare se la cella corrente è quella cercata, la variabile trovato ci permette di sapere al di fuori del ciclo se l elemento cercato è presente o meno all interno della lista. Se entriamo dentro al corpo dell istruzione if la variabile trovato viene impostata al valore 1 altrimenti rimane settata al valore 0. Pagina 11 di 49

12 orso di Programmazione ispensa 18 Numero di occorrenze di un elemento in lista Questa operazione è simile a quella del punto precedente (in questo caso bisogna però contare quante volte un elemento è ripetuto all interno della lista): temp = ; conta = 0; while (temp!= ) { if (temp->valore = valoreaercare) conta++; temp = temp ->next; } printf( L elemento cercato è presente %d volte!,conta); Numero di elementi in lista temp = ; conta = 0; while (temp!= ) { conta++; temp = temp ->next; } printf( La lista ha %d elementi!,conta); Pagina 12 di 49

13 orso di Programmazione ispensa 18 Inserimento di un elemento in coda alla lista Per poter inserire un elemento in coda alla lista prima bisogna procedere a scorrere la lista fino ad arrivare all ultimo elemento: 1 temp temp = ; while (temp->next!= ) temp = temp ->next; ome negli esempi precedenti la lista viene scorsa attraverso un puntatore d appoggio (cursore) in modo da non perdere il riferimento al primo elemento 2 temp attraverso la funzione malloc() viene creato il elemento: = (struct cella*)malloc(sizeof(struct cella)); Pagina 13 di 49

14 orso di Programmazione ispensa 18 3 temp Il puntatore all elemento successivo dell ultima cella viene fatto puntare alla nuova cella: temp->next = ; isogna fare attenzione in quanto se la lista è vuota non bisogna scorrere la lista ma semplicemente far puntare il puntatore alla al elemento. Il codice per questa funzionalità è: = (struct cella*)malloc(sizeof(struct cella)); if ( == ) = ; else { temp = ; while (temp->next!= ) temp = temp ->next; temp->next = ; } Pagina 14 di 49

15 orso di Programmazione ispensa 18 ancellazione dell elemento in alla lista Prima di cancellare l elemento in, il riferimento alla della lista deve passare al secondo elemento per evitare di perdere l intera lista: 1 temp Viene utilizzato un puntatore temp per tener traccia del primo elemento prima di far puntare a all elemento successivo: temp = ; = ->next; 2 temp a questo punto è possibile eliminare il primo elemento attraverso la funzione free(): 3 temp free(temp); Pagina 15 di 49

16 orso di Programmazione ispensa 18 ancellazione di un elemento in lista Per cancellare un elemento dalla lista bisogna prima individuare l elemento all interno della lista, quindi bisogna avviare una procedura di ricerca vista in precedenza per arrivare all elemento da eliminare. temp opo aver individuato l elemento da eliminare (ad esempio la cella considerando l esempio precedente), bisogna rimuoverlo dalla lista. Per eliminare correttamente l elemento senza alterare la catena che collega un elemento ad un altro, bisogna far in modo che l elemento che precede la cella da eliminare venga collegato all elemento che segue la cella da eliminare, quindi: temp Però per poter fare questo è necessario avere un riferimento all elemento precedente della cella da eliminare. Quindi oltre al cursore temp che ci consente di scorrere la lista è necessario un ulteriore puntatore (ad esempio prec ) che di volta in volta ci permetta di tener traccia dell elemento precedente di quello considerato. Supponiamo di dover eliminare la cella, quindi dovremo scorrere la lista fino ad arrivare a tale cella. Pagina 16 di 49

17 orso di Programmazione ispensa 18 prec 1 temp ome prima operazione il cursore temp punta alla stessa cella della, ovviamente il precedente del primo elemento non esiste quindi il riferimento prec sarà a temp = ; ptec = ; prec 2 temp Prima di accedere all elemento successivo bisogna tener traccia dell elemento che si sta per lasciare: prec = temp; Pagina 17 di 49

18 orso di Programmazione ispensa 18 prec 3 temp Si procede passando all elemento successivo: temp = temp->next; I punti 2 e 3 si ripetono fino ad arrivare all elemento da eliminare : prec 4-4 temp 4- Pagina 18 di 49

19 orso di Programmazione ispensa 18 La situazione prima di eliminare l elemento è: prec 5 Prima di eliminare l elemento bisogna collegare la cella precedente () a quella successiva (): prec temp 6 temp prec->next = temp->next; in modo da ottenere: 7 prec temp on la funzione free() eliminiamo la cella puntata da temp free(temp); Pagina 19 di 49

20 orso di Programmazione ispensa 18 Quindi riassumendo il codice per eliminare un elemento dalla lista: prec = ; temp = ; while (temp!= ) { if (temp->valore == elementoaeliminare) { prec->next = temp->next; free(temp); break; } prec = temp; temp = temp->next; } isogna fare attenzione in quanto se l elemento da eliminare è il primo della lista, il codice riportato precedente genera la perdita del riferimento alla della lista: prec temp ERRORE! in questo modo si perde il riferimento alla della lista! Pagina 20 di 49

21 orso di Programmazione ispensa 18 Quindi il codice corretto diventa: prec = ; temp = ; while (temp!= ) { if (temp->valore == elementoaeliminare) { if (prec == ) = ->next; else prec->next = temp->next; free(temp); break; } prec = temp; temp = temp->next; } prima di eliminare un elemento bisogna controllare se questo è l elemento in alla lista, in tal caso bisogna muovere il riferimento alla. Pagina 21 di 49

22 orso di Programmazione ispensa 18 ancellare tutte le occorrenze di un elemento in lista Questa funzionalità è simile alla precedete solo che dopo aver eliminato la prima occorrenza dell elemento non bisogna uscire dal ciclo ma procedere alla ricerca di altre occorrenze: prec = ; temp = ; while (temp!= ) { if (temp->valore == elementoaeliminare) { if (prec == ) = ->next; else prec->next = temp->next; elimina = temp; temp = temp->next; free(elimina); } else { prec = temp; temp = temp->next; } } ato che bisogna procedere con l analisi della lista non è possibile eliminare a partire da temp in quanto verrà utilizzato all iterazione successiva per considerare il elemento. Pagina 22 di 49

23 orso di Programmazione ispensa 18 Swap di due elementi in lista L operazione di swap consiste nello scambiare di posto due elementi all interno della lista. Per eseguire questa operazione bisogna considerare diverse cose: individuare il primo elemento da spostare individuare il secondo elemento da spostare considerare cosa fare se uno dei due elementi è il primo della lista considerare cosa fare se i due elementi sono consecutivi all interno della lista (uno attaccato all altro) Ovviamente in base a quanto detto prima le operazioni da implementare possono essere differenti. Per individuare gli elementi da spostare bisogna implementare una ricerca all interno della lista per ottenere i riferimenti necessari rispettivamente al primo e al secondo elemento (si ripete 2 volte la ricerca vista nei punti precedenti). ome per la cancellazione di un elemento servirà un puntatore all elemento precedente per poter sistemare a modo tutti i riferimenti. onsiderando che nessuno dei due elementi sia in alla lista e che gli elementi non siano consecutivi: precprimo precsecondo E F primo secondo i puntatori primo e secondo si riferiscono rispettivamente alla prima e alla seconda cella da invertire, mentre precprimo e precsecondo sono puntatori agli elementi che precedono primo e secondo. Pagina 23 di 49

24 orso di Programmazione ispensa 18 opo l operazione di swap, la lista dovrebbe diventare (usando qualche puntatore d appoggio): 4 precprimo 1 precsecondo E F primo 2 secondo 3 riorganizzando un po : precprimo precsecondo E F secondo primo Vediamo ora il dettaglio dei passi per arrivare a quanto visto sopra. Pagina 24 di 49

25 orso di Programmazione ispensa 18 1 precprimo precsecondo E F primo secondo precprimo->next = secondo; 2 precprimo precsecondo E F primo secondo precsecondo->next = primo; Pagina 25 di 49

26 orso di Programmazione ispensa 18 3 precprimo temp precsecondo E F primo secondo Per evitare di perdere il riferimento all elemento successivo di primo, prima di spostare il riferimento next di primo salviamo tale valore in una variabile d appoggio temp temp = primo->next; primo->next = secondo->next; precprimo temp precsecondo E F primo secondo Pagina 26 di 49

27 orso di Programmazione ispensa 18 4 precprimo temp precsecondo E F primo secondo secondo->next = temp; 5 precprimo precsecondo E F primo secondo Pagina 27 di 49

28 orso di Programmazione ispensa 18 ome descritto in precedenza troveremo delle differenze nel caso in cui uno dei due elementi da spostare è in alla lista, in quanto parte delle operazioni riguarderanno il riferimento alla della lista: precprimo 1 4 precsecondo E primo 2 secondo 3 avremo quindi: precsecondo E primo secondo Pagina 28 di 49

29 orso di Programmazione ispensa 18 Un altro caso particolare lo troveremo quando gli elementi da invertire sono uno di seguito all altro: 2 precprimo precsecondo 3 primo secondo 1 avremo quindi: precprimo precsecondo primo secondo Pagina 29 di 49

30 orso di Programmazione ispensa 18 Riassumendo il codice necessario per lo swap di due elementi in lista, considerando che primo sia il puntatore al primo elemento, secondo sia il puntatore al secondo elemento, precprimo sia il puntatore all elemento precedente del primo e sia impostato a nel caso tale elemento sia in, precsecondo sia il puntatore all elemento che precede secondo ed eventualmente sia uguale a primo nel caso in cui i due elementi siano consecutivi: if (precprimo == ) //il primo elemento è in = secondo; else precprimo->next = secondo; if (precsecondo->next == primo) //se due elementi sono consecutivi temp = primo; else { temp = primo->next; precsecondo->next = primo; } primo->next = secondo->next; secondo->next = temp; Pagina 30 di 49

31 orso di Programmazione ispensa 18 Inserimento di un elemento attraverso una funzione Proviamo a scrivere una funzione che ci consenta di inserire un elemento all interno della lista, considerando tutte le variabili locali (anticipiamo che questo primo esempio è sbagliato! spiegheremo poi il perchè). 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 struct cella{ 5 char valore; 6 struct cella *next; 7 }; 8 9 void inserisci(struct cella *t, char val); int main() 12 { 13 struct cella * = ; //...altre operazioni inserisci(, ); //...altre operazioni return 0; 22 } void inserisci(struct cella *t, char val) 25 { 26 struct cella *; = (struct cella*)malloc(sizeof(struct cella)); 29 ->valore = v; 30 ->next = t; 31 t = ; 32 } Pagina 31 di 49

32 orso di Programmazione ispensa 18 erchiamo di capire dove si trova l errore analizzando, tra le altre cose, quello che accade in memoria mentre le varie istruzioni vengono eseguite. Prima della chiamata all interno del main() della funzione inserisci, la lista sarà: in memoria quindi potremo avere la seguente situaione: Quando la funzione inserisci viene chiamata (riga 17) all interno del main(), il controllo viene ceduto dal chiamante (main) alla funzione chiamata (inserisci), tutte le variabili della funzione inserisci() vengono allocate in memoria (incluse quelle presenti all interno dell inzione). Pagina 32 di 49

33 orso di Programmazione ispensa 18 Quindi la situazione in memoria sarà: val t I parametri passati alla funzione verranno copiati nelle variabili presenti nell inzione nell ordine in cui sono stati inseriti, quindi t prenderà il valore presente all interno di e val il carattere (riga 24 e 26): val t Pagina 33 di 49

34 orso di Programmazione ispensa 18 ttraverso la funzione malloc() verrà allocata la nuova cella in memoria, l indirizzo del primo byte allocato verrà restituito dalla funzione malloc() e inserito (riga 28) all interno della variabile : val t Il valore presente all interno della variabile val viene copiato all interno dell elemento valore della nuova cella creata, referenziata dal puntatore (riga 29): val t Pagina 34 di 49

35 orso di Programmazione ispensa 18 Quindi la situazione a livello logico sarà: t Pagina 35 di 49

36 orso di Programmazione ispensa 18 ome descritto nel paragrafo la prima operazione da implementare per inserire l elemento in lista consisterà nel far puntare il puntatore next di della nuova cella a quello che punta la (->next = t): t Quindi in memoria avremo: val t Pagina 36 di 49

37 orso di Programmazione ispensa 18 ome descritto nel paragrafo la seconda operazione da fare consiste nello spostare il riferimento della, nel nostro caso t dato che siamo all interno della funzione (t = ): t Quindi in memoria avremo: val t Pagina 37 di 49

38 orso di Programmazione ispensa 18 Riassumendo in memoria avremo la seguente situazione: val t t Pagina 38 di 49

39 orso di Programmazione ispensa 18 Quando la funzione termina tutte le variabili locali vengono eliminate dalla memoria, il controllo viene restituito al chiamante (funzione main()) in memoria avremo la seguente situazione: livello logico: Quindi tutte le modifiche fatte alla della lista all interno della funzione non vengono viste all esterno! Pagina 39 di 49

40 orso di Programmazione ispensa 18 Modifichiamo il codice descritto all inizio paragrafo (in rosso le modifiche). 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 struct cella{ 5 char valore; 6 struct cella *next; 7 }; 8 9 void inserisci(struct cella **t, char val); int main() 12 { 13 struct cella * = ; //...altre operazioni inserisci(&, ); //...altre operazioni return 0; 22 } void inserisci(struct cella **t, char val) 25 { 26 struct cella *; = (struct cella*)malloc(sizeof(struct cella)); 29 ->valore = v; 30 ->next = *t; 31 *t = ; 32 } La funzione inserisci() riceve ora come primo parametro un puntatore di puntatore cioè una variabile che al suo interno mantiene l indirizzo di memoria di un altra variabile che a sua volta contiene un indirizzo di memoria. Pagina 40 di 49

41 orso di Programmazione ispensa 18 Prima della chiamata all interno del main() della funzione inserisci, la lista sarà: in memoria quindi potremo avere la seguente situaione: Quando la funzione inserisci viene chiamata (riga 17) all interno del main(), il controllo viene ceduto dal chiamante (main) alla funzione chiamata (inserisci), tutte le variabili della funzione inserisci() vengono allocate in memoria (incluse quelle presenti all interno dell inzione). Pagina 41 di 49

42 orso di Programmazione ispensa 18 Quindi la situazione in memoria sarà: val t I parametri passati alla funzione verranno copiati nelle variabili presenti nell inzione nell ordine in cui sono stati inseriti, quindi t prenderà l indirizzo di memoria della prima variabile e quindi di e val il carattere (riga 24 e 26): val t Pagina 42 di 49

43 orso di Programmazione ispensa 18 ttraverso la funzione malloc() verrà allocata la nuova cella in memoria, l indirizzo del primo byte allocato verrà restituito dalla funzione malloc() e inserito (riga 28) all interno della variabile : val t Il valore presente all interno della variabile val viene copiato all interno dell elemento valore della nuova cella creata, referenziata dal puntatore (riga 29): val t Pagina 43 di 49

44 orso di Programmazione ispensa 18 Quindi la situazione a livello logico sarà: t *t *t val t con t si ottiene il valore 1001 o meglio l indirizzo di memoria che contiene il valore della variabile (puntatore), mentre con *t si accede al contenuto dell area di memoria referenziata dall indirizzo Pagina 44 di 49

45 orso di Programmazione ispensa 18 ome descritto nel paragrafo la prima operazione da implementare per inserire l elemento in lista consisterà nel far puntare il puntatore next di della nuova cella a quello che punta la (->next = *t): t *t Quindi in memoria avremo: val t Pagina 45 di 49

46 orso di Programmazione ispensa 18 ome descritto nel paragrafo la seconda operazione da fare consiste nello spostare il riferimento della, nel nostro caso t dato che siamo all interno della funzione (*t = ): t *t N. modificando *t modifichiamo anche! Quindi in memoria avremo: val t Pagina 46 di 49

47 orso di Programmazione ispensa 18 Riassumendo in memoria avremo la seguente situazione: val t t Pagina 47 di 49

48 orso di Programmazione ispensa 18 Quando la funzione termina tutte le variabili locali vengono eliminate dalla memoria, il controllo viene restituito al chiamante (funzione main()) in memoria avremo la seguente situazione: livello logico: Quindi tutte le modifiche fatte alla della lista in questo caso rimarranno! Pagina 48 di 49

49 orso di Programmazione ispensa 18 Una versione ulteriore del programma corretto potrebbe essere (in rosso le modifiche rispetto alla prima versione errata): 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 struct cella{ 5 char valore; 6 struct cella *next; 7 }; 8 9 struct cella* inserisci(struct cella *t, char val); int main() 12 { 13 struct cella * = ; //...altre operazioni = inserisci(, ); //...altre operazioni return 0; 22 } struct cella* inserisci(struct cella *t, char val) 25 { 26 struct cella *; = (struct cella*)malloc(sizeof(struct cella)); 29 ->valore = v; 30 ->next = t; 31 t = ; 32 return t; 33 } In questo caso la funzione inserisci restituisce un valore, e cioè la della lista modificata (riga 32). Quando la funzione termina il valore restituito viene inserito all interno della variabile (riga 17) in modo da mantenere aggiornate le modifiche fatte. Questa versione è equivalente alla precedente. Pagina 49 di 49

LISTE IMPLEMENTATE TRAMITE STRUTTURE COLLEGATE CON DOPPI PUNTATORI

LISTE IMPLEMENTATE TRAMITE STRUTTURE COLLEGATE CON DOPPI PUNTATORI LISTE IMPLEMENTATE TRAMITE STRUTTURE COLLEGATE CON DOPPI PUNTATORI Liste con doppi puntatori typedef int TipoElemLista; struct StructLista { TipoElemLista info; struct StructLista *next; struct StructLista

Dettagli

Esercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018

Esercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018 Esercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018 Esercizi sull allocazione dinamica della memoria in C Il codice di questi esercizi é contenuto nella cartella parte1 1. Implementare una lista

Dettagli

Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1

Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1 Operazioni sulle liste Definiamo una serie di procedure e funzioni per operare sulle liste. Usiamo liste di interi per semplicità, ma tutte le operazioni sono realizzabili in modo del tutto analogo su

Dettagli

Allocazione dinamica memoria

Allocazione dinamica memoria Allocazione dinamica memoria Marco Casazza 11/12/2017 1 Esercizio 1 1 /* 2 Creare una lista bidirezionale di interi, ovvero una lista 3 che permette lo scorrimento in entrambe le direzioni ( dal primo

Dettagli

Liste concatenate. Violetta Lonati

Liste concatenate. Violetta Lonati Liste concatenate Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 2 novembre 2017 Violetta Lonati Liste

Dettagli

C: panoramica. Violetta Lonati

C: panoramica. Violetta Lonati C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati

Dettagli

Esercitazione 11. Liste semplici

Esercitazione 11. Liste semplici Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene

Dettagli

Introduzione al linguaggio C Puntatori

Introduzione al linguaggio C Puntatori Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2017

Dettagli

Esercitazioni di Fondamenti di Informatica - Lez. 7 20/11/2018

Esercitazioni di Fondamenti di Informatica - Lez. 7 20/11/2018 Esercitazioni di Fondamenti di Informatica - Lez. 7 0/11/018 Esercizi sull allocazione dinamica della memoria in C 1. Cosa stampa il seguente programma? 1 #d e f i n e MAXLENGTH 0 4 typedef struct { char

Dettagli

Laboratorio di Programmazione

Laboratorio di Programmazione Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 21 Strutture dinamiche Gli array ci permettono di memorizzare un insieme di dati dello stesso tipo Deve essere noto staticamente il

Dettagli

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} } ERRATA CORRIGE Pulizia del buffer di input: come fare? (1) Dopo aver richiamato getchar() per prelevare un carattere dal buffer di input, inseriamo una seconda chiamata a getchar(), senza assegnare il

Dettagli

Previously on TDP. LISTA rappresentata mediante "struct e puntatori" Cosa e aux? Di che tipo e e cosa contiene?

Previously on TDP. LISTA rappresentata mediante struct e puntatori Cosa e aux? Di che tipo e e cosa contiene? Previously on TDP lis ^ ^ 7 21 ** ** 14 *** memoria 9 NULL LISTA rappresentata mediante "struct e puntatori" *** lis->info == cosa? lis->next == ^^; /*cosa e ^^?*/ che cosa e' (*lis)? Cosa e aux? Di che

Dettagli

Il linguaggio C. Puntatori e dintorni

Il linguaggio C. Puntatori e dintorni Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;

Dettagli

Strutture Dati per Inserimento Ordinato. Luca Abeni

Strutture Dati per Inserimento Ordinato. Luca Abeni Strutture Dati per Inserimento Ordinato Luca Abeni Esempio: Ordinamento di Numeri A cosa servono i tipi di dato strutturati? Non bastano i tipi scalari? Capiamolo con un esempio... Problema: dato un insieme

Dettagli

ALGORITMI E STRUTTURE DATI

ALGORITMI E STRUTTURE DATI ALGORITMI E STRUTTURE DATI Esercitazioni AndreA Orlandini http://www.dia.uniroma3.it/~orlandin/asd/ e-mail: orlandin@dia.uniroma3.it Orario di ricevimento: Martedì 14.00-16.00 Puntatori e Liste StudentiDIA

Dettagli

Previously on TDP. LISTA rappresentata mediante "struct e puntatori" TipoLista lis. Dichiarare DISEGNARE e. DISEGNARE aux.

Previously on TDP. LISTA rappresentata mediante struct e puntatori TipoLista lis. Dichiarare DISEGNARE e. DISEGNARE aux. Previously on TDP lis 7 21 ** ** 14 *** *** memoria 9 LISTA rappresentata mediante "struct e puntatori" TipoLista lis lis->info == cosa? lis->next == ; /*cosa e?*/ che cosa e' (*lis)? Dichiarare DISEGNARE

Dettagli

Rappresentazione collegata mediante puntatori di una lista

Rappresentazione collegata mediante puntatori di una lista Rappresentazione collegata mediante puntatori di una lista 1 Rappresentazione collegata di una lista Gli elementi di una lista possono essere rappresentati mediante delle struct contenenti, oltre al dato

Dettagli

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste 4 Le liste collegate 4.0 Le liste collegate c Diego Calvanese Fondamenti di Informatica Corso di Laurea in Ingegneria Elettronica A.A. 2001/2002 4.0 0 4 Le liste collegate Rappresentazione di liste 4.1

Dettagli

Programmazione I - Laboratorio

Programmazione I - Laboratorio Programmazione I - Laboratorio Esercitazione 6 - Liste Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti di.unipi.it 2. Dipartimento

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica Liste semplici (semplicemente linkate) Una lista semplice e costituita da nodi Laboratorio di Informatica 7. Strutture complesse di dati in C++ Ogni nodo e una struttura che contiene : Dati Un riferimento

Dettagli

Strutture Dinamiche. Fondamenti di Informatica

Strutture Dinamiche. Fondamenti di Informatica Strutture Dinamiche Fondamenti di Informatica 1 Indice Allocazione e de-allocazione di memoria Liste e loro gestione Companies, srl 2 Allocazione e cancellazione di memoria malloc (sizeof (TipoDato));

Dettagli

Strutture dati dinamiche in C. Emilio Di Giacomo

Strutture dati dinamiche in C. Emilio Di Giacomo Strutture dati dinamiche in C Emilio Di Giacomo Strutture dati Una struttura dati è un contenitore in cui i dati sono organizzati in maniera che possano essere recuperati e manipolati efficientemente Un

Dettagli

Titolo presentazione INFORMATICA. sottotitolo A.A Milano, XX mese 20XX Laboratorio n 6 Ing. Gian Enrico Conti Dott.

Titolo presentazione INFORMATICA. sottotitolo A.A Milano, XX mese 20XX Laboratorio n 6 Ing. Gian Enrico Conti Dott. Titolo presentazione INFORMATICA A sottotitolo A.A. 2017-18 Milano, XX mese 20XX Laboratorio n 6 Ing. Gian Enrico Conti Dott. Michele Zanella Info Logistiche (cont d) Calendario laboratori Data Orario

Dettagli

Strutture Dinamiche. Strutture Dinamiche

Strutture Dinamiche. Strutture Dinamiche Corso di Informatica A Vito Perrone 1 Indice Allocazione e de-allocazione di memoria Liste e loro gestione 2 Allocazione e cancellazione di memoria malloc (sizeof (TipoDato)); Crea in memoria una variabile

Dettagli

dott. Sabrina Senatore

dott. Sabrina Senatore dott. Sabrina Senatore Dipartimento di Informatica Riepilogo strutture 1 Sintassi della dichiarazione: typedef struct nome_tipo { Dichiarazione dei campi nome_tipo; typedef struct point{ int x; int y;

Dettagli

Laboratorio di Informatica I

Laboratorio di Informatica I Struttura della lezione Lezione 6: Array e puntatori Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Una funzione per i numeri di Fibonacci

Dettagli

Esercizi. La funzione swapint() primo tentativo

Esercizi. La funzione swapint() primo tentativo Politecnico di Milano Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio di array. #include

Dettagli

Introduzione al linguaggio C Puntatori

Introduzione al linguaggio C Puntatori Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2016

Dettagli

Introduzione al linguaggio C Puntatori

Introduzione al linguaggio C Puntatori Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati

Dettagli

Lezione 6: Array e puntatori

Lezione 6: Array e puntatori Lezione 6: Array e puntatori Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione Una funzione per i numeri di Fibonacci

Dettagli

Il linguaggio C Strutture

Il linguaggio C Strutture Il linguaggio C Strutture Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Linguaggio C -- Strutture 2 Ringraziamenti Questi

Dettagli

5. Quinta esercitazione autoguidata: liste semplici

5. Quinta esercitazione autoguidata: liste semplici 22 5. Quinta esercitazione autoguidata: liste semplici 5.1. Liste rappresentate mediante strutture e puntatori (LISTE1.C, LISTE2.C) Scrivere un programma che - costruisce una lista di k interi (con k letto

Dettagli

E12 Esercizi su Strutture dati dinamiche in C

E12 Esercizi su Strutture dati dinamiche in C E12 Esercizi su Strutture dati dinamiche in C Esercizio 1. Si vuole realizzare una lista caratteri in C utilizzando una rappresentazione semplicemente collegata. Scrivere una struttura nodo che contiene

Dettagli

IMPLEMENTAZIONE CONCATENATE DELLE LISTE

IMPLEMENTAZIONE CONCATENATE DELLE LISTE IMPLEMENTAZIONE CONCATENATE DELLE LISTE Liste collegate Come già visto, la realizzazione sequenziale prevede che la sequenzialità degli elementi della lista venga rappresentata dalla adiacenza delle locazioni

Dettagli

Liste concatenate e allocazione dinamica

Liste concatenate e allocazione dinamica Liste concatenate e allocazione dinamica Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2018/2019 Argomenti del Corso Ogni lezione consta di una spiegazione assistita da slide, e seguita

Dettagli

Inserimento in una lista ordinata

Inserimento in una lista ordinata Inserimento in una lista ordinata Vogliamo inserire un nuovo elemento in una lista in cui gli elementi sono memorizzati in ordine crescente: Passo 1: creare un nuovo nodo della lista Passo 2: trovare il

Dettagli

LE STRUTTURE DATI DINAMICHE

LE STRUTTURE DATI DINAMICHE LE TRUTTURE DTI DIMICHE Talvolta è necessario allocare spazio di memoria durante l esecuzione di un programma oppure creare variabili di durata temporanea. Esempio: Leggere e memorizzare dei numeri interi

Dettagli

Programmazione I (Classe 1)

Programmazione I (Classe 1) Programmazione I (Classe 1) Preappello di Giugno (prima prova) 10 Giugno 2016 Docenti: De Prisco - Deufemia - Zizza Cognome: Nome: Matricola: Ritirato 1 Esercizi (leggere attentamente il testo prima di

Dettagli

Introduzione al C. Lezione 4 Allocazione dinamica della memoria. Rossano Venturini. Pagina web del corso

Introduzione al C. Lezione 4 Allocazione dinamica della memoria. Rossano Venturini. Pagina web del corso Introduzione al C Lezione 4 Allocazione dinamica della memoria Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Lezioni di ripasso

Dettagli

Liste collegate. Liste

Liste collegate. Liste Liste È molto comune dover rappresentare sequenze di elementi tutti dello stesso tipo e fare operazioni su di esse. Esempi: sequenza di interi (23 46 5 28 3) sequenza di caratteri ( x r f ) sequenza di

Dettagli

Linguaggio C: Strutture e Liste Concatenate Valeria Cardellini

Linguaggio C: Strutture e Liste Concatenate Valeria Cardellini Linguaggio C: Strutture e Liste Concatenate Valeria Cardellini Corso di Calcolatori Elettronici A.A. 2018/19 Università degli Studi di Roma Tor Vergata Dipartimento di Ingegneria Civile e Ingegneria Informatica

Dettagli

La gestione della memoria dinamica Heap

La gestione della memoria dinamica Heap Laboratorio di Algoritmi e Strutture Dati La gestione della memoria dinamica Heap Prof. Luigi Lamberti 2005 Cenni sui Processi Un Programma è un insieme di Istruzioni memorizzato in un file con le costanti

Dettagli

Esercizio 1 Liste: calcolo del numero di elementi ripetuti in una lista

Esercizio 1 Liste: calcolo del numero di elementi ripetuti in una lista Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 11 Esercitazione: 27 gennaio 2005 Esercizi su liste, ricorsione, file. Scaletta Esercizio 1 Liste: calcolo del numero di

Dettagli

now is the for men all good come aid

now is the for men all good come aid Alberi binari Supponiamo di volere gestire il problema di contare le occorrenze di tutte le parole presenti in un particolare input. Poichè la lista delle parole non è nota a priori, non siamo in grado

Dettagli

Linguaggio C: PUNTATORI

Linguaggio C: PUNTATORI Linguaggio C: PUNTATORI I puntatori sono una delle più importanti caratteristiche del linguaggio C. Permettono di lavorare a basso livello, mantenendo flessibilità e praticità. Il C utilizza molto i puntatori

Dettagli

Le liste. Prof. Francesco Accarino IIS Sesto San Giovanni Via Leopardi 132

Le liste. Prof. Francesco Accarino IIS Sesto San Giovanni Via Leopardi 132 Le liste Prof. Francesco Accarino IIS Sesto San Giovanni Via Leopardi 132 Le Liste Le liste non sequenziali (concatenate) sono costituite da elementi che vengono memorizzati in memoria centrale non uno

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Strutture dati complesse Esempi di strutture dati complesse analizzate in questa lezione: Fondamenti di Informatica 21. Strutture di dati complesse in C++ Array di puntatori Pila (Stack) Coda (queue) Liste

Dettagli

Il linguaggio C Strutture

Il linguaggio C Strutture Il linguaggio C Strutture Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Copyright Mirko Viroli Copyright 2017, 2018 Moreno

Dettagli

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo. Unità Didattica 4 Linguaggio C Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo. 1 Vettori Struttura astratta: Insieme di elementi dello stesso tipo, ciascuno individuato da un indice;

Dettagli

RICORSIONE, PUNTATORI E ARRAY. Quarto Laboratorio

RICORSIONE, PUNTATORI E ARRAY. Quarto Laboratorio RICORSIONE, PUNTATORI E ARRAY Quarto Laboratorio 16 DICEMBRE 2011 SCADENZA TERZA ESERCITAZIONE FUNZIONI RICORSIVE ESERCIZIO Scrivere una funzione ricorsiva che, assegnati due interi N1 ed N2, restituisca

Dettagli

La programmazione nel linguaggio C

La programmazione nel linguaggio C Cancellazione : versione ricorsiva Sfruttiamo la visione ricorsiva della struttura dati per realizzare la cancellazione in modo ricorsivo 1. la cancellazione della vuota non richiede alcuna azione 2. la

Dettagli

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori Puntatori Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori 1 Il puntatore Un tipo puntatore è un tipo scalare per

Dettagli

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori Puntatori Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori 1 Il puntatore Un tipo puntatore è un tipo scalare per

Dettagli

Diversi modi di rappresentare sequenze di elementi

Diversi modi di rappresentare sequenze di elementi Liste È molto comune dover rappresentare sequenze di elementi tutti dello stesso tipo e fare operazioni su di esse. Esempi: sequenza di interi (23 46 5 2 3) sequenza di caratteri ( x r f ) sequenza di

Dettagli

Introduzione. Liste. Strutture ricorsive (2) Strutture ricorsive (1) DD p KP p

Introduzione. Liste. Strutture ricorsive (2) Strutture ricorsive (1) DD p KP p Introduzione Liste DD p. 449-474 KP p.397-424 Abbiamo fin ora studiato strutture dati con dimensione fissa: vettori e matrici strutture Introduciamo ora le strutture dati dinamiche (liste concatenate):

Dettagli

Fondamenti di Informatica II

Fondamenti di Informatica II Università degli studi di Messina Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica e delle Telecomunicazioni Fondamenti di Informatica II Tipi di dati astratti(adt)- seconda parte Coda Struttura

Dettagli

Laboratorio Informatica Classe 4A Serale Venerdì 18/02/2011. Gruppo. Cognome Riontino Nome Raffaele. Cognome Nome

Laboratorio Informatica Classe 4A Serale Venerdì 18/02/2011. Gruppo. Cognome Riontino Nome Raffaele. Cognome Nome Laboratorio Informatica Classe 4A Serale Venerdì 18/02/2011 Gruppo Cognome Riontino Nome Raffaele Cognome Nome TRACCIA 2 ARGOMENTO: LISTE TEMPO: 4h 1. Utilizzando Typedef definire un nuovo tipo di dato

Dettagli

Lezione 11: Liste a Puntatori e Input/Output

Lezione 11: Liste a Puntatori e Input/Output Lezione 11: Liste a Puntatori e Input/Output Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione Richiamo: strutture (struct)

Dettagli

#include <stdio.h> #include <stdlib.h> //necessaria per la malloc #include <string.h> // costante #define MAX_L 30

#include <stdio.h> #include <stdlib.h> //necessaria per la malloc #include <string.h> // costante #define MAX_L 30 /* Dopo aver definito una lista in grado di contenere i dati di alcune persone (nome, genere e altezza in metri), scrivere un programma che consenta di verificare che inizialmente la lista sia vuota e

Dettagli

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet francesc

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet  francesc Algoritmi e Strutture di Dati I 1 Algoritmi e Strutture di Dati I Massimo Franceschet http://www.sci.unich.it/ francesc Algoritmi e Strutture di Dati I 2 Oggetti e puntatori Un oggetto è un area di memoria

Dettagli

Corso di Fondamenti di Programmazione canale E-O. Strutture. Strutture. Definizione di strutture (2) Definizione di strutture (1)

Corso di Fondamenti di Programmazione canale E-O. Strutture. Strutture. Definizione di strutture (2) Definizione di strutture (1) Corso di Fondamenti di Programmazione canale E-O Tiziana Calamoneri Strutture e Unioni DD Cap. 10, pp. 379-391, 405-406 KP Cap. 9, pp. 361-379 Strutture Strutture Collezioni di variabili correlate (aggregati)

Dettagli

Esercitazione 5. Procedure e Funzioni Il comando condizionale: switch

Esercitazione 5. Procedure e Funzioni Il comando condizionale: switch Esercitazione 5 Procedure e Funzioni Il comando condizionale: switch Comando: switch-case switch (espressione) { /* espressione deve essere case costante1: istruzione1 di tipo int o char */ [break]; case

Dettagli

Array. // utente pippo $utente1 = array( username => pippo, password => pippo123, ruolo => amministratore );

Array. // utente pippo $utente1 = array( username => pippo, password => pippo123, ruolo => amministratore ); Array Esercizio 1 Implementare un servizio che permetta il login di utenti ad un sistema e la possibilità di visualizzare articoli. Il servizio riceve in ingresso, tramite GET, l username e la password

Dettagli

Fondamenti di Informatica T-1 Modulo 2

Fondamenti di Informatica T-1 Modulo 2 Fondamenti di Informatica T-1 Modulo 2 Obiettivo di questa esercitazione Allocazione dinamica della memoria ed esempi di problemi tipici d esame 2 Esercizio 1 Una ditta utilizza un sistema informatico

Dettagli

Aritmetica dei puntatori

Aritmetica dei puntatori Aritmetica dei puntatori Marco Alberti Programmazione e Laboratorio, A.A. 2016-2017 Dipartimento di Matematica e Informatica - Università di Ferrara Ultima modifica: 7 dicembre 2016 sizeof L operatore

Dettagli

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

Esercitazioni di Prog. II (funzioni su insiemi) Chiara Petrioli Esercitazioni di Prog. II (funzioni su insiemi) Chiara Petrioli Esercizi per la manipolazione di insiemi (rappresentati tramite liste) Insiemi.c /*Questo file include i prototipi e le definizioni di specifiche

Dettagli

Esercitazione di Reti degli elaboratori

Esercitazione di Reti degli elaboratori Esercitazione di Prof.ssa Chiara Petrioli Christian Cardia, Gabriele Saturni Cosa vedremo in questa lezione? Gli Array Gli array multidimensionali Le stringhe I puntatori Esercizi Pagina 1 Gli Array Definizione

Dettagli

Informatica 1. Corso di Laurea Triennale in Matematica. Gianluca Rossi

Informatica 1. Corso di Laurea Triennale in Matematica. Gianluca Rossi Informatica 1 Corso di Laurea Triennale in Matematica Gianluca Rossi gianluca.rossi@uniroma2.it Dipartimento di Matematica Università di Roma Tor Vergata 11: Stringhe (www.informatica-uno.blogspot.com)

Dettagli

Scope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano

Scope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano Scope delle variabili e passaggio parametri Danilo Ardagna Politecnico di Milano 1-4-2014 Introduzione! Con le funzioni è stato introdotto un meccanismo per definire dei piccoli programmi all interno di

Dettagli

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE PROGRAMMAZIONE II canale A-D 2007-2008 14 luglio 2008 TRACCIA DI SOLUZIONE 1. Si vogliono realizzare mediante puntatori delle liste circolari, cioè delle liste tali che l ultimo elemento della lista punta

Dettagli

Indirizzi e tipi puntatore a

Indirizzi e tipi puntatore a Linguaggio C Indirizzi e tipi puntatore a Università degli Studi di Brescia Prof. Massimiliano Giacomin Indirizzo e tipo puntatore a TIPO Indirizzo NOME Valore Indirizzo 0101011110011001 1101011110011111

Dettagli

La Struttura Dati Pila

La Struttura Dati Pila La Struttura Dati Pila La pila o stack è una particolare struttura dati in cui l'inserimento e la cancellazione sono consentite solo in una specifica posizione, chiamata cima (top) dello stack. La gestione

Dettagli

Informatica 1. Prova di recupero 21 Settembre 2001

Informatica 1. Prova di recupero 21 Settembre 2001 Informatica 1 Prova di recupero 21 Settembre 2001 Si risolvano i seguenti esercizi. Ai fini della determinazione del voto finale il loro punteggio andrà sommato al punteggio del laboratorio. Il tempo complessivo

Dettagli

Scritto di Algoritmi e s.d. (1o anno) 5 Luglio 2005

Scritto di Algoritmi e s.d. (1o anno) 5 Luglio 2005 Scritto di Algoritmi e s.d. (1o anno) Luglio 200 Esercizio 1 (punti in prima approssimazione) Consideriamo il seguente codice C: #include #include typedef struct cella * List; struct

Dettagli

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length); Fondamenti di Informatica L-A (A.A. 004/005) - Ingegneria Informatica Prof.ssa Mello & Prof. Bellavista I Prova Intermedia del 11/11/004 - durata h - COMPITO B Esercizio 1 (punti 1) Una associazione di

Dettagli

L'Allocazione Dinamica della Memoria nel linguaggio C

L'Allocazione Dinamica della Memoria nel linguaggio C L'Allocazione Dinamica della Memoria nel linguaggio C Prof. Rio Chierego riochierego@libero.it http://www.riochierego.it/informatica.htm Sommario Questo documento tratta l'allocazione dinamica della memoria

Dettagli

Array. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali

Array. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali MASTER Information Technology Excellence Road (I.T.E.R.) Array Maurizio Palesi Salvatore Serrano Master ITER Informatica di Base Maurizio Palesi, Salvatore Serrano 1 Tipi di dato stutturati In C si possono

Dettagli

La programmazione nel linguaggio C. Liste

La programmazione nel linguaggio C. Liste Liste È molto comune dover rappresentare sequenze di elementi tutti dello stesso tipo e fare operazioni su di esse. Esempi: sequenza di interi (23 46 5 28 3) sequenza di caratteri ( x r f ) sequenza di

Dettagli

Esercizio 1: funzione con valore di ritorno di tipo puntatore

Esercizio 1: funzione con valore di ritorno di tipo puntatore Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 7 Esercitazione: 14 dicembre 2005 Esercizi su ricorsione, manipolazione stringhe, strutture dinamiche Problema: Esercizio

Dettagli

Politecnico di Milano - Dipartimento di Elettronica e informazione Prof. Mauro Negri

Politecnico di Milano - Dipartimento di Elettronica e informazione Prof. Mauro Negri Politecnico di Milano - Dipartimento di Elettronica e informazione Prof. Mauro Negri Fondamenti di Informatica II prova in itinere 25 gennaio 2011 Matricola Cognome Nome Durata prova: 2 ore Istruzioni

Dettagli

INFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 4 Dott. Michele Zanella Ing. Gian Enrico Conti

INFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 4 Dott. Michele Zanella Ing. Gian Enrico Conti INFORMATICA A Titolo presentazione sottotitolo A.A. 2018-19 Milano, XX mese 20XX Laboratorio n 4 Dott. Michele Zanella Ing. Gian Enrico Conti Puntatori I puntatori sono delle variabili che contengono l

Dettagli

Fondamenti di Programmazione

Fondamenti di Programmazione A.A. 08/09 Fondamenti di Programmazione (canale E-O) Docente: Prof.ssa Tiziana Calamoneri calamo@di.uniroma1.it Esercitatore: Dott. Roberto Petroccia petroccia@di.uniroma1.it Pagina del corso: http://twiki.di.uniroma1.it/twiki/view/programmazione1/eo/webhome

Dettagli

La definizione del tipo di dato astratto lista è intrinsecamente ricorsiva, infatti una lista può essere:

La definizione del tipo di dato astratto lista è intrinsecamente ricorsiva, infatti una lista può essere: LISTE DINAMICHE Liste semplicemente concatenate: La definizione del tipo di dato astratto lista è intrinsecamente ricorsiva, infatti una lista può essere: la lista vuota; oppure contiene un valore (di

Dettagli

Programmazione I (Classe 1)

Programmazione I (Classe 1) Programmazione I (Classe 1) Terzo Appello (prima prova) 9 Settembre 2016 Docenti: De Prisco - Deufemia - Zizza Cognome: Nome: Matricola: Ritirato 1 Esercizi (leggere attentamente il testo prima di scrivere

Dettagli

e e n-1 Esercizio 1.2 (Punti 8; punti 10 se risolto facendo uso della ricorsione)

e e n-1 Esercizio 1.2 (Punti 8; punti 10 se risolto facendo uso della ricorsione) Informatica 1 Seconda prova 31 Gennaio 2006 Esercizio 1 (Punti Una lista bidirezionale è una lista in cui ogni elemento è collegato, mediante puntatori, all elemento seguente e a quello precedente; alla

Dettagli

Lab 12 Allocazione dinamica della memoria

Lab 12 Allocazione dinamica della memoria Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni Lab 12 Allocazione dinamica della memoria Lab17 1 Esercizio 0 Un file di testo di nome bambini.txt, contiene informazioni

Dettagli

Mini-dispensa sui puntatori in C

Mini-dispensa sui puntatori in C Mini-dispensa sui puntatori in C P. Zavarise Versione 1 ottobre 013 1 Valore e indirizzo di una variabile Ripassiamo il significato di dal punto di vista del programmatore. int a=; Viene creata una variabile

Dettagli

Lezione 8: Stringhe ed array multidimensionali

Lezione 8: Stringhe ed array multidimensionali Lezione 8: Stringhe ed array multidimensionali Vittorio Scarano Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione AVVISO: la lezione di laboratorio di 28/5 non si

Dettagli

Puntatori e array. Violetta Lonati

Puntatori e array. Violetta Lonati Puntatori e array Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati Puntatori e array

Dettagli

In una coda gli inserimenti si fanno alla fine e le cancellazioni all inizio! First In First Out

In una coda gli inserimenti si fanno alla fine e le cancellazioni all inizio! First In First Out In una coda gli inserimenti si fanno alla e e le cancellazioni all inizio! First In First Out Progr II - Coda 1 CODA: i requisiti Una coda (queue) è un ADT in cui le operazioni sono inserimenti e cancellazioni

Dettagli

Lezione 8 Struct e qsort

Lezione 8 Struct e qsort Lezione 8 Struct e qsort Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 3 QuickSort strambo Modificare il Quicksort

Dettagli

Gestione dinamica della memoria

Gestione dinamica della memoria Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Gestione dinamica della memoria Pietro Di Lena - pietro.dilena@unibo.it A pessimistic programmer sees the array as half empty.

Dettagli

Parametri Formali di una Funzione e Record di Attivazione

Parametri Formali di una Funzione e Record di Attivazione Parametri Formali di una Funzione e Attivazione Un record di attivazione rappresenta il mondo di una funzione, e contiene tutto ciò che ne caratterizza l esistenza, tra cui ad esempio: le variabili locali

Dettagli

Indovina la lettera...

Indovina la lettera... Indovina la lettera... La lezione di oggi consiste nel preparare un programma che chiede all'utente di indovinare quale sia il carattere generato dal programma stesso in modo casuale. Il numero totale

Dettagli