argomenti (Sezione 9.1 e Capitolo 13 Savitch) puntatori puntatori I PUNTATORI E LE STRUTTURE DATI DINAMICHE 1. dichiarazioni di puntatori

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "argomenti (Sezione 9.1 e Capitolo 13 Savitch) puntatori puntatori I PUNTATORI E LE STRUTTURE DATI DINAMICHE 1. dichiarazioni di puntatori"

Transcript

1 argomenti (Sezione 9. e Caitolo Savitch). dichiarazioni di untatori I PUNTATORI E LE STRUTTURE DATI DINAMICHE Cosimo Laneve. le oerazione su untatori (NULL, new, delete, &, *). untatori assati come arametri e ritornate come valori di funzioni. esemi/esercizi 5. le strutture dati dinamiche: liste 6. la funzione revert iterativa untatori un untatore è l indirizzo di una locazione di memoria gli indirizzi di memoria ossono essere usati in alternativa alle variabili: se una variabile è memorizzata in locazioni di memoria successive, l indirizzo di memoria della rima locazione uò essere usato in alternativa alla variabile se una variabile è assata er riferimento in una dichiarazione di funzione, uando la funzione viene invocata, si assa l indirizzo del arametro attuale cf. funzione scambia untatori i linguaggi di rogrammazione consentono di definire tii di dato indirizzi di memoria - è ossibile comrendere il significato del assaggio er riferimento - è ossibile imlementare il assaggio er riferimento attraverso il assaggio er valore di un untatore - è ossibile definire e creare strutture dati di dimensioni non note staticamente (cioè definire VARIABILI DINAMICHE)

2 oerazioni su untatori? oerazioni su untatori? uando si scrive il rogramma non è ossibile saere in uale indirizzo di memoria il dato sarà caricato ossiamo solamente far riferimento agli indirizzi in maniera simbolica, utilizzando identificatori che li raresentano non è ragionevole calcolare indirizzo_var > indirizzo_var è ragionevole calcolare un untatore non unta ad un indirizzo di memoria ualunue, ma solamente a indirizzi che contengono elementi di un certo tio esemi: untatori a interi untatori a caratteri indirizzo_var == indirizzo_var il untatore è un tio di dato arametrico: diende dal oure tio di elementi a cui unta indirizzo_var!= indirizzo_var 5 6 num_ car_ num car a dichiarazioni di untatori oerazioni su untatori er indicare che un identificatore è un untatore a valori di un certo tio, nella dichiarazione, si refigge l identificatore con * esemi: int * ; // è un untatore a interi double *f_ ; int *, n ; l * identifica come untatore // f_ è un untatore a double // è un untatore a interi // n è un intero NULL (untatore vuoto) & (indirizzo di) new (allocazione blocco di memoria) * (dereferenziazione) delete (deallocazione blocco di memoria) 7 8

3 oerazioni su untatori/null oerazioni su untatori/& la costante NULL raresenta il untatore vuoto l oeratore &, alicato a una lhs-exression, restituisce il suo indirizzo di memoria (che uò essere assegnato a un untatore) la costante NULL ha valore 0 ed è definita in diverse librerie, incluso iostream la costante NULL uò essere assegnata a ualunue untatore esemio: n = 5 ; = &n ; esemi: int * char *, = NULL = NULL r = NULL r ; ; ; if ( == NULL)... ; // ERRORE! r non è un untatore int *, n ; n = 5 ; n n = &n ; n 5 5 è errore fare = &5 o = &(n*5) 9 0 oerazioni su untatori/new gestione della memoria durante l esecuzione roblema: la dichiarazione di untatore alloca solo lo sazio che uò contenere un indirizzo di memoria la memoria (ram) del rogramma è divisa in due arti: stack e hea come fare a far untare il untatore ad una certa area? la funzione new ermette di allocare dinamicamente la memoria er una variabile di tio untatore new rende in inut un tio e restituisce un untatore ad un nuovo blocco di memoria che contiene elementi di uel tio hea è l area di memoria in cui sono allocati nuovi blocchi di memoria (ad esemio, dalla funzione new) stack è l area di memoria in cui vengono allocati i record di attivazione delle funzioni = new int; rogramma area di lavoro del rogramma stack hea int * ; = new int ; new alloca memoria dall hea

4 variabili dinamiche oerazioni su untatori/* (dereferenziazione) se si esegue come si fa ad accedere alla cella untata da (che è stata allocata dinamicamente)? le celle di memoria allocate con l oeratore new sono chiamate variabili dinamiche l area di memoria er le variabili dinamiche è creata e distrutta mentre il rogramma è in esecuzione l area ci memoria er le altre variabili è creata a temo di comilazione e distrutta uando il rogramma termina int * ; = new int ; serve un oerazione che, reso un untatore, restituisce l indirizzo di memoria er accedere all elemento untato da esso è l oerazione di dereferenziazione * : = new int ; * = 5 ; * = 5 ; 5 il risultato della dereferenziazione è una lhs-exression oerazioni su untatori/esemi aliasing: oerazioni su untatori/delete rima int *, *, x ;... x = ; = &x ; * = ; cout << * << x ; x x delete non fa nulla se il untatore in inut è NULL esemio: x x * = * ; 5 delete num ; differenza tra oggetti untati e untatori: = ; uest area otrà essere riutilizzate da successive chiamate a new doo = ; * = ; cout << * << x ; rima aliasing tra untatori: delete libera l area di memoria untata dall argomento che deve essere un untatore doo il contenuto della locazione a cui fa riferimento viene aggiornato con il contenuto della locazione a cui fa riferimento hea hea num num A delete num ; 6

5 dangling ointers il valore del untatore doo l invocazione di delete è indefinito (il valore diende dal comilatore) dangling ointer dangling ointers = ; delete ; * = * + ; se un altro untatore unta alla stessa area di memoria, anche il suo valore è indefinito delete non fa nulla se il untatore in inut è NULL dereferenziare un dangling ointer è una oerazione disastrosa 5 = ; delete ; 5 5 esemio: = ; delete ; * = * + ; ERRORE ERRORE 7 8 oerazioni su untatori/delete regola di rogrammazione: è buona norma riassegnare il untatore doo l invocazione di delete (riassegnare i dangling ointer) definizione di nuovi tii è ossibile definire nuovi tii ed associargli un nome - la arola chiave è tyedef esemi: = ; delete ; = NULL ; = new int ; * = ; int * ; while (true) { = new int ; delete ; // non termina 9 sintassi: tyedef Tio_Noto identificatore ; Tio_Noto è un tio già definito esemi: tyedef int array_di_int[50] ; tyedef int altro_int ; 0

6 definizione di tii untatori esercizi base su untatori er evitare errori con l uso dei untatori, conviene definire tii untatori esemio: tyedef int* _int ;. definire una variabile di tio intero, incrementarla due volte attraverso due untatori distinti e stamare il risultato - definisce un tio untatore a interi - è ossibile dichiarare variabili di tio _int notare la osi- ad esemio _int ; - è euivalente a int * ; zione dell * - evita confusioni tra untatori a interi e variabili intere nelle dichiarazioni int *, *, x, y; _int, ; int x, y ;. allocare una variabile di tio intero, incrementarla attraverso untatore, stamare il risultato e deallocarla. rendere in inut 0 interi e memorizzarli in un array di 0 interi utilizzando i untatori (le lhs degli assegnamenti sono semre oerazioni *). Poi stamare i valori. definire una struttura di 5 cami interi e memorizzarci 5 interi resi in inut utilizzando i untatori (le lhs degli assegnamenti sono semre oerazioni *). Poi stamare i valori 5. definire una variante della funzione scambia che scambia i valori di due variabili utilizzando i untatori e usarla all interno del main 6. (er casa) ridefinire un algoritmo di ordinamento di array accedendo agli elementi attraverso untatori untatori assati come argomento di funzioni il arametro formale è di tio untatore il arametro attuale è l indirizzo di una variabile untatori assati come argomento di funzioni uot uot division(0,,&uot,&rem); rem esemio: funzione che rende in inut dividendo e divisore, e restituisce uoziente e resto void division(int dvd, int dvs, int *, int *r){ * = dvd / dvs ; *r = dvd % dvs; int main(){ int uot, rem; division(0,, &uot, &rem); cout << uot << rem ; return(0) ; cosa stama main? uot rem dvd 0 dvs * = /d dvd vs; vd = d *r %dv rem s; dvd 0 dvs r uot rem r il assaggio dei untatori è er valore: vengono coiati gli indirizzi che consentono di modificare le variabili del chiamante

7 esemio/la funzione scambia le strutture dati dinamiche siano a e b di tio int void scambia(int x, int y){ int tm ; tm = x ; x = y ; y = tm ; // invocata con scambia(a,b) void scambia(int *x, int *y){ int tm ; tm = *x ; *x = *y ; *y = tm ; // invocata con scambia(&a,&b) void scambia(int& x, int& y){ int tm ; tm = x ; x = y ; y = tm ; // invocata con scambia(a,b) le strutture dati dinamiche sono strutture dati le cui dimensioni ossono essere estese o ridotte durante l esecuzione del rogramma tutti i tii di dati studiati finora hanno una dimensione che è nota staticamente ci sono casi in cui sono necessari dati la cui dimensione è sconosciuta al rogrammatore void scambia(int *x, int *y){ int *tm ; tm = x ; x = y ; y = tm ; // invocata 5 con scambia(&a,&b) 6 esemi di strutture dati dinamiche seuenza di caratteri lunga a iacere da rendere in inut e da stamare in modo invertito numeri naturali grandi a iacere e oerazioni su di esse ile, code, insiemi senza limitazioni sul numero di elementi uesti roblemi ossono essere risolti con gli array, MA IN MODO INSODDISFACENTE tii di dato dinamici/le liste una lista è una seuenza di nodi che contengono valori (di un determinato tio) e in cui ogni nodo, eccetto l ultimo, è collegato al nodo successivo mediante un untatore una lista cresce/decresce durante l esecuzione una lista è di solito una struttura con un camo che contiene un untatore alla struttura stessa di solito la lista viene visualizzata attraverso nodi e frecce che li connettono 7 8

8 imlementazione dei nodi i nodi i rettangoli in blu del disegno raresentano i nodi della lista i nodi contengono le informazioni memorizzate nella lista e un untatore i nodi sono imlementati in C++ mediante tii di dato struct (o mediante classi... ) esemio: una struttura che memorizza due elementi un intero e un untatore ai nodi della struttura il untatore unta all intero nodo, non ad una arte di esso il untatore struct lista { int val ; lista *next ; ; raresenta NULL 9 0 la testa della lista uesta definizione circolare è ammessa in C++ accesso agli elementi della lista il rettangolo chiamato non è un nodo della lista ma un untatore ad essa uesto è un modo er modificare l intero nel rimo nodo da a 5 (*).val = 5 ; - è dichiarato lista * ; - oure è ossibile definire un tio di dato untatore alla lista e dichiararlo di conseguenza tyedef lista* tr_lista ; tr_lista ; - è di tio untatore, uindi * restituisce l oggetto untato (dereferenziazione) - l oggetto untato è una struttura e si utilizza la dot-notation er accedere al camo val - le arentesi sono necessarie erchè il. ha recedenza sul *

9 l oeratore freccia (->) come creare una lista iniziamo con la definizione: l oeratore -> combina le azioni della dereferenziazione e dell accesso a un camo di una struttura (*).val = 5 ; struct lista { int val ; lista *next ; ; tyedef lista* tr_lista ; uindi definiamo la testa della lista tr_lista ; uò essere riscritto uindi creiamo il rimo nodo = new lista ; ->val = 5 ; - ora unta al rimo e unico nodo della lista - l oeratore -> è uello iù usato come creare una lista oerazioni su liste dichiarazioni e inizializzazioni ora che unta ad un nodo occorre inizializzare i cami con dei valori ->val = 5 ; ->next = NULL ; 5 oichè uesto è l unico nodo, il untatore al resto della lista è inizializzato a NULL tr_lista,, ;?? = new lista ; ->val = ;?? = new lista ; ->val = ; = ; collegamento tra nodi?? ->next = ; tre modi er accedere al camo val del secondo nodo ->val ->val 5 (->next)->val oure oure oure 6 (*).val (*).val (*((*).next)).val

10 oerazioni su liste oerazioni su liste aggiunta di un nodo in coda ->next = new lista ; (->next)->val = ;???? - cosa succede se facessi = new lista ; la testa è il rimo elemento della lista ultimo elemento della lista: si memorizza nel camo next il valore NULL (->next)->next = NULL; la variabile unta alla testa della lista una funzione che conosce l indirizzo contenuto in ha accesso ad ogni elemento della lista 7 8 inserimento di nodi inserimento di un elemento tra rimo e secondo 0 inserimento di un elemento in testa: = new lista ; ->val = 0 ; ->next = ; = ; inserimento di un elemento tra il rimo e il secondo = new lista ; ->val = ; ->next = ->next ; ->next = ; 0 l inserimento di un elemento tra rimo e secondo richiede la modifica SOLAMENTE di due untatori nelle liste - ciò vale ualunue sia la lunghezza della lista - se avessimo avuto un array, avremmo dovuto sostare tutti gli elementi er far osto al nuovo elemento - inserire in una lista è iù efficiente che inserire in un array 9 0

11 la funzione _insert (seudo-)codice er _insert - creare una nuova variabile dinamica untata da tm_ rogettiamo una funzione che rende una lista ed un elemento e ritorna la lista con il nuovo elemento in testa: - la dichiarazione della funzione è tr_lista _insert (tr_lista, int el) ; - _insert creerà un nuovo nodo che conterrà el nel camo val - inizializzare il nuovo nodo *tm_ con el e con - ritornare il untatore tm_ il codice tr_lista _insert (tr_lista, int el){ tr_lista tm_ ; tm_ = new lista ; tm_->val = el ; tm_->next = ; return(tm_) ; lista vuota erdere nodi - una lista senza elementi è detta lista vuota - una lista vuota non ha un nodo in testa - il untatore alla lista vuota ha valore NULL - una funzione che oera sulle liste deve SEMPRE essere verificata uando l inut è una lista vuota - _insert è corretta uando == NULL si otrebbe ensare di definire _insert in uesto modo tr_lista _insert (tr_lista, int el){ = new lista ; il vecchio nodo a cui ->val = el ; ->next = ; untava è erso return() ; ritorna una lista circolare

12 erdita di nodi altri esemi memory leaks rimozione dell elemento di testa: 0 = ->next ; il rimo elemento è erso se non è untato da un altro untatore... i nodi che sono ersi assegnando i loro untatori a nuovi indirizzi non sono iù accessibili non c è alcun modo er fare riferimento ai nodi ersi e er recuerare la loro memoria nell hea libero un rogramma che erde nodi ha un memory leak rimozione del secondo elemento: ->next = (->next)->next ; 0 il secondo elemento è erso se non è untato da un altro untatore... - rogrammi con memory leaks significativi ossono causare crash di sistema - esemio: while (true) { = new int ; // termina con out-of-memory 5 6 ricerca di elementi in una lista rimo codice er la ricerca di elementi in una lista ermette di visitare l elemento successivo della lista tr_lista search_el(tr_lista, const int e) ; oichè il untatore è assato er valore, ossiamo scorrere la lista utilizzando - si uò evitare di dichiarare un untatore locale alla funzione l algoritmo è di scorrere la lista untata da finchè non si trova l elemento e oure il valore di è NULL - l oerazione er scorrere la lista è - in ogni caso la funzione ritorna 7 = ->next ; tr_lista search_el(tr_lista, const int e){ while ((->val!= e)&&(->next!= NULL)) = ->next ; if (->val == e) return() ; else return(null) ;. controllare il caso in cui l elemento e si trova come ultimo. controllare il caso in cui è NULL 8

13 rimo codice er la ricerca di elementi in una lista secondo codice er la ricerca di elementi in una lista la funzione tr_lista search_el(tr_lista, const int e){ while ((->val!= e)&&(->next!= NULL)) = ->next ; if (->val == e) return() ; else return(null) ; ha un errore uando == NULL - bisogna ensare a un caso seciale uando è NULL tr_lista search_el(tr_lista, const int e){ if ( == NULL) return(null) ; else { while ((->val!= e)&&(->next!= NULL)) = ->next ; if (->val == e) return() ; else return(null) ; - funziona ma ha l aria di essere un atch 9 50 terzo codice er la ricerca di elementi in una lista tr_lista search_el(tr_lista, const int e){ bool found = false ; while ((!= NULL) && (!found)){ if (->val == e) found = true ; else = ->next ; return() ; 5 non è ossibile imlementare la ricerca binaria untatori e iteratori un iteratore è un oeratore che consente di eseguire la stessa azione su ogni elementi di un tio di dato comlesso un iteratore si uò alicare - ad un array, mediante l indice - o ad una lista, mediante il untatore alla testa un attern generale di iteratore er liste è node *iter = ; while (iter!= NULL){ // esegui l azione sul nodo untato da iter iter = iter->next ; unta al nodo iniziale della lista 5

14 esemio di iteratore: stama degli elementi in una lista inserimento in coda inserimento di un elemento in coda a una lista: void stama_el(tr_lista ){ tr_lista iter = ; while (iter!= NULL) { cout << iter->val ; iter = iter->next ; = ; while (!= NULL) = ->next ; = new lista ; ->val = 0 ; ->next = NULL ; erchè è sbagliato? in alternativa al attern recedente si uò usare node *iter ; for(iter = ; iter!= NULL; iter = iter->next){ // esegui l azione sul nodo untato da iter 0 il nodo untato da è scollegato dalla lista! 5 5 inserimento in coda inserimento in coda iteriamo su ->next : = ; while (->next!= NULL) = ->next ; ->next = new lista ; = ->next ; ->val = 0 ; ->next = NULL ; ha un errore uando 0 == NULL - bisogna ensare a un caso seciale uando è NULL 55 if ( == NULL) { = new lista ; ->val = 0 ; ->next = NULL ; else { = ; while (->next!= NULL) = ->next ; ->next = new lista ; = ->next ; ->val = 0 ; ->next = NULL ; 56

15 rimozione dalla coda rimozione dalla coda vogliamo rimuovere l ultimo elemento della lista erchè è sbagliato scrivere - la lista deve avere almeno un elemento, altrimenti non c è niente da rimuovere erchè è sbagliato scrivere = ; while (->next!= NULL) = ->next ; delete ; = NULL ; è un dangling ointer! = ; while (->next!= NULL) = ->next ; delete ->next ; ->next è già NULL ->next = NULL ; delete ->next non fa niente (vedi lucido relativo) rimozione dalla coda rimozione dalla coda dobbiamo iterare su ->next->next in alternativa ad usare ->next->next che è oco leggibile, si ossono usare due untatori: e after dobbiamo searare i casi di lista con un solo elemento da uelli di lista con almeno due elementi if (->next == NULL) { delete ; = NULL ; else { = ; while (->next->next!= NULL) = ->next ; delete ->next ; ->next = NULL ; uesto codice va eseguito solamente se la lista untata da ha almeno un elemento 59 - after unta al nodo successivo a if (->next == NULL) { delete ; = NULL ; else { = ; after = ->next ; while (after->next!= NULL) { = after ; after = after->next ; delete after ; ->next = NULL ; 60

16 esercizi sulle liste. scrivere un rogramma che crea una lista di lunghezza length (costante) i cui elementi sono numeri generati casualmente, li inserisce in una lista e oi stama la lista degli inut stama il valore iù vicino alla media. scrivere un rogramma che rende in inut interi dall utente finchè l utente non inserisce 0, oi rende un altro intero n e rimuove dalla lista tutti gli interi multili di n, uindi stama la lista. scrivere un rogramma che consente all'utente di lavorare su una lista di interi con le seguenti oerazioni aggiungere un elemento in fondo vedere le informazioni dell'elemento corrente andare avanti di uno andare indietro di uno eliminare l'elemento corrente 6 le liste/revert roblema: scrivere una funzione che rende in inut una seuenza di caratteri che termina con il. e stama la seuenza invertita void revert(){ char c ; tr_lista, ; = NULL ; cin >> c ; while (c!= '.') { = new lista ; ->val = c ; ->next = ; = ; cin >> c ; 6 costruisce una ila cout << "\n la seuenza invertita e`: " ; while (!= NULL){ cout << ->val ; = ->next ; strutture dati dinamiche/esercizi. imlementare il tio di dato ila con le oerazioni di (a) creazione della ila vuota, (b) ush = inserimento di un elemento nella ila, (c) o = eliminazione di un elemento dalla ila; (d) to = valore dell elemento in testa alla ila. imlementare il tio di dato coda con le oerazioni di (a) creazione della coda vuota, (b) enueue = inserimento di un elemento nella coda, (c) deueue = eliminazione di un elemento dalla testa della coda; (d) to_el = valore dell elemento in testa alla coda. imlementare il tio di dato insieme con le oerazioni di (a) creazione dell insieme vuoto, (b) is_in = aartenenza di un elemento all insieme (c) union = unione di due insiemi; (d) intersection = intersezione di due insiemi 6 liste bidirezionali alcune delle oerazioni recedenti sono scomode da imlementare su liste semlici ossiamo modificare leggermente la struttura dati lista er risolvere roblemi uali accesso all'ultimo elemento nelle liste semlici è necessario scorrere tutta la lista è sufficiente tenere in una variabile il untatore all'ultimo elemento della lista sostamento all'indietro nelle liste semlici è necessario scorrere tutta la lista cercando l'elemento che unta a uello corrente è sufficiente tenere in ogni elemento un untatore al recedente nel rimo elemento uesto untatore avrà valore NULL ueste liste si chiamano liste bidirezionali o con doi untatori 6

17 lista bidirezionali definizione in C++ struct bilista { int val; bilista *rec ; bilista *next ; ; tyedef bilista* tr_bilista ; tail liste bidirezionali: esercizi rendere in inut caratteri e creare una lista bidirezionale che li contenga. Stamare i caratteri inseriti in ordine inverso e in ordine normale scrivere un rogramma che consente all'utente di lavorare su una lista bidirezionale di interi con le seguenti oerazioni aggiungere un elemento in fondo vedere le informazioni dell'elemento corrente andare avanti di uno andare indietro di uno eliminare l'elemento corrente 65 66

I PUNTATORI E LE STRUTTURE DATI DINAMICHE. Cosimo Laneve/Ivan Lanese

I PUNTATORI E LE STRUTTURE DATI DINAMICHE. Cosimo Laneve/Ivan Lanese I PUNTATORI E LE STRUTTURE DATI DINAMICHE Cosimo Laneve/Ivan Lanese argomenti 1. dichiarazioni di puntatori 2. le operazione su puntatori (NULL, new, delete, &, *) 3. puntatori passati come parametri e

Dettagli

Problemi legati all'uso dei Puntatori

Problemi legati all'uso dei Puntatori Problemi legati all'uso dei Puntatori 1. Aree inutilizzabili: Possibilità di erdere l'indirizzo di aree di memoria allocate al rogramma che uindi non sono iù accessibili. (v. esemio recedente). 2. Riferimenti

Dettagli

PUNTATORI. Ivan Lanese

PUNTATORI. Ivan Lanese PUNTATORI Ivan Lanese Argomenti Puntatori Liste Puntatori Un puntatore è un tipo di dato che contiene l'indirizzo di memoria di un altro tipo di dato In c+o i puntatori sono tipati: avremo puntatori a

Dettagli

Puntatori in C. Fondamenti di Informatica. Daniele Loiacono

Puntatori in C. Fondamenti di Informatica. Daniele Loiacono Puntatori in C Fondamenti di Informatica Puntatori Come è fatta la memoria del calcolatore? Un modello concettuale della memoria q La memoria centrale di un calcolatore è una sequenza di celle numerate

Dettagli

Laboratorio di Informatica I

Laboratorio di Informatica I Struttura della lezione Lezione 15: Puntatori e stringhe Vittorio Scarano Corso di Laurea in Informatica Puntatori Relazione con gli arrays Aritmetica dei untatori Allocazione dinamica di memoria Puntatori

Dettagli

I parametri e il sovraccarico

I parametri e il sovraccarico I arametri e il sovraccarico Vediamo dei dettagli sul assaggio dei arametri. Parametri formali e attuali class Esemio { static void rimo(int x) { int y; rimo(24+3); variabile locale y è una variabile che

Dettagli

Operazioni su liste. Creazione della lista (vuota e successivi inserimenti) Lettura di una lista Stampa di una lista Cancellazione di una lista

Operazioni su liste. Creazione della lista (vuota e successivi inserimenti) Lettura di una lista Stampa di una lista Cancellazione di una lista Oerazioni su liste Creazione della lista (vuota e successivi inserimenti) Lettura di una lista Stama di una lista Cancellazione di una lista Inserimento in lista Estrazione da lista Inserimento in lista

Dettagli

Strutture dati concatenate

Strutture dati concatenate Strutture dati concatenate Strutture dati concatenate Le strutture concatenate sono utilizzate er la creazione e la gestione flessibile di variabili dinamiche Una struttura concatenata contiene almeno

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. Array dei nomi degli esami (MAX ESAMI è il massimo numero degli esami). Array con i crediti degli esami.

Strutture. Array dei nomi degli esami (MAX ESAMI è il massimo numero degli esami). Array con i crediti degli esami. Consideriamo l esercizio assegnato la scorsa lezione per rappresentare il libretto di uno studente. Per memorizzare i dati si sono utilizzati tre array: char* nomiesami[max ESAMI] Array dei nomi degli

Dettagli

Laboratorio di algoritmi e strutture dati

Laboratorio di algoritmi e strutture dati Laboratorio di algoritmi e strutture dati Docente: Violetta Lonati mercoledì 5 novembre 2008 1 Esercizi introduttivi 1.1 La vostra malloc Scrivete una funzione my_malloc che allochi memoria usando la funzione

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

Liste. Marco Alberti Programmazione e Laboratorio, A.A

Liste. Marco Alberti Programmazione e Laboratorio, A.A Liste Marco Aberti Programmazione e Laboratorio, A.A. 016-017 Diartimento di Matematica e Informatica - Università di Ferrara Utima modifica: 16 dicembre 016 Lista Raresenta una sequenza di entità deo

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

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

Strutture dati dinamiche

Strutture dati dinamiche Strutture dati dinamiche - Liste concatenate - Pile -> LIFO (last in first out) - Code -> FIFO (first in first out) - Alberi binari: gestione dati in algoritmi complessi Liste Concatenate Formata da elementi

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

Allocazione Dinamica della Memoria

Allocazione Dinamica della Memoria Allocazione Dinamica della Memoria Elisa Marengo Università degli Studi di Torino Dipartimento di Informatica Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 1 / 10 Scelta delle variabili Quando

Dettagli

Allocazione dinamica della memoria

Allocazione dinamica della memoria Allocazione dinamica della memoria Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati

Dettagli

Tipi di dato strutturato. Tipi strutturati: il Record. Il Record. Il Record in C: struct

Tipi di dato strutturato. Tipi strutturati: il Record. Il Record. Il Record in C: struct Tii di dato strutturato drian ilincai 2900 21.0 Marco lbergamo 31000 27.0 Leonardo mico 8000 21.0 Massimiliano rino 100 19.2 Valerio Zerillo 4000 34. Il Record Esemio: Si vuole raresentare adeguatamente

Dettagli

Liste. Una lista è una struttura dati (formata da elementi dello stesso tipo e collegati insieme) la cui lunghezza può variare dinamicamente.

Liste. Una lista è una struttura dati (formata da elementi dello stesso tipo e collegati insieme) la cui lunghezza può variare dinamicamente. Liste Una lista è una struttura dati (formata da elementi dello stesso tipo e collegati insieme) la cui lunghezza può variare dinamicamente. I suoi elementi sono variabili dinamiche che vengono creati

Dettagli

Università degli Studi di Cassino e del Lazio Meridionale Corso di Fondamenti di Informatica Allocazione dinamica di memoria

Università degli Studi di Cassino e del Lazio Meridionale Corso di Fondamenti di Informatica Allocazione dinamica di memoria di Cassino e del Lazio Meridionale Corso di Informatica Allocazione dinamica di memoria Anno Accademico 2015/2016 Francesco Tortorella Allocazione dinamica di memoria Finora abbiamo considerato variabili

Dettagli

Programmazione I Prova scritta - 10 gennaio h20min

Programmazione I Prova scritta - 10 gennaio h20min Programmazione I Prova scritta - 10 gennaio 2019-1h20min NOTA: Nei programmi si trascuri ogni problema legato al tipo ed al valore di ritorno della funzione main, inoltre si sottintenda la presenza delle

Dettagli

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve LE STRUTTURE DATI DINAMICHE: GLI ALBERI Cosimo Laneve 1 argomenti 1. definizione di alberi e nozioni relative 2. implementazione degli alberi, creazione, visita 3. algoritmo di visita iterativa e sua implementazione

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

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

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

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

INFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti INFORMATICA A Titolo presentazione sottotitolo A.A. 2018-19 Milano, XX mese 20XX Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti Ricorsione La ricorsione è un approccio per la risoluzione

Dettagli

Variabili e Funzioni. Informatica 1 / 19

Variabili e Funzioni. Informatica 1 / 19 Variabili e Funzioni Informatica 1 / 19 Programmi C e Un programma C e composto da funzioni e variabili Variabile: memorizza valori appartenenti ad un insieme di definizione (dipendente dal tipo) Funzione:

Dettagli

LE STRUTTURE. Cosimo Laneve

LE STRUTTURE. Cosimo Laneve LE STRUTTURE Cosimo Laneve 1 argomenti (Sezione 10.1 Savitch) 1. dichiarazioni di strutture 2. l operazione di selezione e i campi 3. strutture passate come parametri e ritornate come valori di funzioni

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

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

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

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

Gestione dinamica di una lista

Gestione dinamica di una lista Gestione dinamica di una lista La lista lineare è una struttura astratta di dati a lunghezza variabile in cui l'inserimento di un nuovo elemento e l'estrazione di un elemento può essere effettuata in una

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

cons: L E L (...), e (e,...) Operatori tradizionali sulle liste car: (e,...) cdr: What s LISTE? null: () TRUE (...) FALSE Una lista e' una

cons: L E L (...), e (e,...) Operatori tradizionali sulle liste car: (e,...) cdr: What s LISTE? null: () TRUE (...) FALSE Una lista e' una What s LISTE? Una lista e' una ( es. λ = {4, 9, 1 E = dominio degli elementi di lista (persone, voli, interi, lettere...) L = {λ / λ e' una lista di elementi in E Bool = {TRUE, FALSE cons: L E L (...),

Dettagli

Laboratorio di algoritmi e strutture dati

Laboratorio di algoritmi e strutture dati Laboratorio di algoritmi e strutture dati Docente: Violetta Lonati 1 Esercizi su array frastagliati 1.1 Indice della arola iù iccola Scrivete una funzione con rototio int smallest_word_index( char *s[],

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

Gestione dinamica di una coda

Gestione dinamica di una coda Gestione dinamica di una coda Una coda o queue è una lista lineare a lunghezza variabile in cui l'inserimento di nuovi elementi (push) viene effettuato ad un estremo (fondo o rear) e l'estrazione degli

Dettagli

La struttura dati CODA

La struttura dati CODA Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 La struttura dati CODA Pietro Di Lena - pietro.dilena@unibo.it Introduzione Una coda (o queue) è una struttura dati astratta

Dettagli

Allocazione dinamica della memoria

Allocazione dinamica della memoria Allocazione dinamica della memoria Allocazione statica: limiti Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente la loro esistenza deve essere prevista e dichiarata a priori

Dettagli

Variabili dinamiche. Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free

Variabili dinamiche. Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free Variabili dinamiche Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free 1 Tipi di variabili in C In C è possibile classificare le variabili in

Dettagli

Linked Lists. Liste linkate (1) Progettazione: struct. Liste linkate (2)

Linked Lists. Liste linkate (1) Progettazione: struct. Liste linkate (2) Liste linkate () Linked Lists La combinazione di class/struct e puntatori porta alla creazioni di interessanti Abstract Data Type liste linkate ( stack, queues ), trees Liste linkate come strutture struct

Dettagli

Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo.

Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo. Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo. int a = 5; a 5 α=&a Esistono in C particolari variabili dette puntatori che possono

Dettagli

Allocazione dinamica della memoria

Allocazione dinamica della memoria Allocazione dinamica della memoria Memoria stack ed heap (1) L'area di memoria stack é quella in cui viene allocato un pacchetto di dati non appena l'esecuzione passa dal programma chiamante a una funzione.

Dettagli

Esercizi Strutture dati di tipo astratto

Esercizi Strutture dati di tipo astratto Salvatore Cuomo Esercizi Strutture dati di tipo astratto Lezione n. 20 Parole chiave: Strutture dati, pile code, liste Corso di Laurea: Informatica Insegnamento: Programmazione II, modulo di Laboratorio

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

Scrivere un funzione ricorsiva che stampa a video i valori di una lista di elementi con campo info di tipo intero.

Scrivere un funzione ricorsiva che stampa a video i valori di una lista di elementi con campo info di tipo intero. Esercizio 1 Fondamenti di Informatica - Esercitazione n.13 1 Scrivere un funzione ricorsiva che stama a video i valori di una lista di elementi con camo info di tio intero. stama(elem* ); 1 chiamata stama(=);

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C 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,

Dettagli

LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica. Algoritmi ricorsivi

LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica. Algoritmi ricorsivi LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica Marco Lapegna Dipartimento di Matematica e Applicazioni Universita degli Studi di Napoli Federico II wpage.unina.it/lapegna Partiamo da un

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

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

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

Linked Lists. Liste linkate (1) liste linkate ( stack, queues ), trees. Liste linkate come strutture

Linked Lists. Liste linkate (1) liste linkate ( stack, queues ), trees. Liste linkate come strutture Linked Lists Liste linkate () La combinazione di class/struct e puntatori porta alla creazioni di interessanti Abstract Data Type liste linkate ( stack, queues ), trees Liste linkate come strutture struct

Dettagli

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli Studi di Bologna Anno Accademico 2008/2009 Sommario

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

Politecnico di Milano. Strutture dati dinamiche

Politecnico di Milano. Strutture dati dinamiche Politecnico di Milano Strutture dati dinamiche Strutture dati statiche e dinamiche In C le dimensioni di ogni dato sono note prima dell esecuzione Sarebbe utile avere contenitori la cui dimensione varia

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

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 9 - Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di Laurea

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

Ingegneria Elettronica Ingegneria delle Telecomunicazioni (J-Z) Ing. Antonio Monteleone A.A. 2001/02 3 ciclo

Ingegneria Elettronica Ingegneria delle Telecomunicazioni (J-Z) Ing. Antonio Monteleone A.A. 2001/02 3 ciclo Ingegneria Elettronica Ingegneria delle Telecomunicazioni (J-Z) Ing. Antonio Monteleone A.A. 2001/02 3 ciclo In C++ è possibile distinguere due aree distinte di memoria: memoria stack e memoria heap E

Dettagli

FUNZIONI. attribuire un nome ad un insieme di istruzioni parametrizzare l esecuzione del codice

FUNZIONI. attribuire un nome ad un insieme di istruzioni parametrizzare l esecuzione del codice Funzioni FUNZIONI Spesso può essere utile avere la possibilità di costruire nuove istruzioni che risolvono parti specifiche di un problema Una funzione permette di attribuire un nome ad un insieme di istruzioni

Dettagli

Una breve introduzione all implementazione in C di algoritmi su grafo

Una breve introduzione all implementazione in C di algoritmi su grafo Una breve introduzione all implementazione in C di algoritmi su grafo A cura di Gianmaria Leo Introduzione La lezione è un introduzione a concetti e strumenti che permettono l implementazione di algoritmi

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7

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

Parte 4. Liste. P. Picasso Guernica, AA. 2015/16

Parte 4. Liste. P. Picasso Guernica, AA. 2015/16 Parte 4 Liste - AA. 2015/16 P. Picasso Guernica, 1937 4.1 4.2 Strutture dati complesse Per la risoluzione di alcuni problemi vi è la necessità di utilizzare strutture dati dinamiche e complesse Si consideri

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

Prova di Algoritmi e s.d. (1o anno) 17 Settembre TESTO e RISPOSTE

Prova di Algoritmi e s.d. (1o anno) 17 Settembre TESTO e RISPOSTE Prova di Algoritmi e s.d. (1o anno) 17 Settembre 2002 TESTO e RISPOSTE Esercizio 1 (punti 7 in prima approssimazione) Consideriamo alberi binari con insieme dei nodi NODI = N (l'insieme dei naturali).

Dettagli

Le Funzioni in C. Fondamenti di Informatica Anno Accademico 2010/2011. Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia

Le Funzioni in C. Fondamenti di Informatica Anno Accademico 2010/2011. Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Le Funzioni in C Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Fondamenti di Informatica Anno Accademico 2010/2011 docente: prof. Michele Salvemini 1/24 Sommario Le funzioni Il

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

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

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

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

Sommario. Tipo stringa: string. Tipo stringa: stile C. Tipo stringa Tipo booleano

Sommario. Tipo stringa: string. Tipo stringa: stile C. Tipo stringa Tipo booleano Tipo stringa Tipo booleano Sommario Ricorsione: Definizione Chiamata di funzione Ricorsione in coda Ricorsione non in coda Ricorsionei eccessiva Esempio di ricorsione: ricerca binaria Tipo stringa Il C++

Dettagli

Parte 3. Puntatori. [S. Dalí The temptation of St. Anthony, 1946] - AA. 2015/16 3.1

Parte 3. Puntatori. [S. Dalí The temptation of St. Anthony, 1946] - AA. 2015/16 3.1 Parte 3 Puntatori [S. Dalí The temptation of St. Anthony, 1946] 3.1 3.2 Puntatori Approfondimento rispetto alla trattazione vista nel corso precedente Finora come avete utilizzato i puntatori? Principalmente

Dettagli

Sommario. Le strutture dati elementari per implementare sequenze: Vettori Liste

Sommario. Le strutture dati elementari per implementare sequenze: Vettori Liste Sequenze Sommario Le strutture dati elementari per implementare sequenze: Vettori Liste Strutture dati elementari Le strutture dati vettore e lista sono fra le strutture dati più usate e semplici Il loro

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

10/10/2016. Caratteristiche degli array. Il tipo RECORD. Il record. LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica

10/10/2016. Caratteristiche degli array. Il tipo RECORD. Il record. LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica Caratteristiche degli array Principali caratteristiche degli array: LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica Marco Lapegna Dipartimento di Matematica e Applicazioni Universita degli

Dettagli

Parte 4D. Liste doppie. R. Magritte Transfer, D.1

Parte 4D. Liste doppie. R. Magritte Transfer, D.1 Parte 4D Liste doppie R. Magritte Transfer, 1966 4D.1 4D.2 Liste doppie Lista singolarmente concatenata o lineare: ciascun elemento contiene solo un puntatore al prossimo elemento Lista doppiamente concatenata

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

Fondamenti di Informatica

Fondamenti di Informatica Programmazione modulare (top-down) Fondamenti di Informatica 15. Funzioni in C++ (parte 1) Problemi complessi Conviene suddividere il programma in sottoprogrammi piu semplici mediante la metodologia di

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

Lista concatenata. Liste. Strutture autoreferenzianti. Strutture autoreferenzianti

Lista concatenata. Liste. Strutture autoreferenzianti. Strutture autoreferenzianti Liste Ver. 2.4 Lista concatenata Struttura dati in cui ogni oggetto ha un collegamento ad un altro oggetto (linked list ) Il collegamento è un untatore con l indirizzo di memoria dell altro oggetto 2 2010

Dettagli

Corso di Fondamenti di Informatica

Corso di Fondamenti di Informatica Corso di Fondamenti di Informatica Il tipo puntatore; l allocazione dinamica della memoria Claudio De Stefano - Corso di Fondamenti di Informatica 1 puntatori una variabile di tipo puntatore al tipo x

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

La classe std::vector della Standard Template Library del C++

La classe std::vector della Standard Template Library del C++ La classe std::vector della Standard Template Library del C++ Alberto Garfagnini Università degli studi di Padova 23 Ottobre 2013 Programmazione generica in C++ : i Template I templates sono probabilmente

Dettagli

Informatica per Statistica Riassunto della lezioni del 14/11/2012 e 16/11/2012

Informatica per Statistica Riassunto della lezioni del 14/11/2012 e 16/11/2012 Informatica per Statistica Riassunto della lezioni del 14/11/2012 e 16/11/2012 Igor Melatti Cenni sui puntatori in C Per ogni variabile normale dichiarata, il compilatore riserva una precisa quantità di

Dettagli

Assembly (3): le procedure

Assembly (3): le procedure Architettura degli Elaboratori e delle Reti Lezione 13 Assembly (3): le procedure Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano (Patterson-Hennessy:

Dettagli

Le funzioni: dichiarazione, definizione e chiamata Il passaggio degli argomenti per valore e riferimento La funzione main() Le regole di visibilità

Le funzioni: dichiarazione, definizione e chiamata Il passaggio degli argomenti per valore e riferimento La funzione main() Le regole di visibilità Funzioni I Parte Indice Le funzioni: dichiarazione, definizione e chiamata Il passaggio degli argomenti per valore e riferimento La funzione main() Le regole di visibilità Le funzioni Tutti i linguaggi

Dettagli

Programmazione C. Puntatori Array come puntatori

Programmazione C. Puntatori Array come puntatori Programmazione C Puntatori Array come puntatori Perché usare gli indirizzi Tutto in C ha un valore int a = 4; significa che il valore della variabile a è 4, e che potrà essere modificato dal programma

Dettagli