LE STRUTTURE DATI DINAMICHE
|
|
- Francesco Rota
- 5 anni fa
- Visualizzazioni
Transcript
1 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 inseriti da tastiera finché non si inserisce lo 0. Esiste una zona di memoria riservata a cui è possibile accedere per allocare dati durante l esecuzione del programma. avviene tra mite uso di puntatori ed è eseguita da apposite funzioni contenute nella libreria standard stdlib.h. void *malloc(int n); Le variabili statiche e dinamiche sono memorizzate in zone di memoria differenti. lloca dinamicamente una zona di memoria pari a n byte e restituisce un puntatore a void che punta alla zona di memoria allocata, contenente un tipo di indefinito. avviene tramite uso di puntatori ed è eseguita da apposite funzioni. void *calloc(int n, int dim); lloca dinamicamente una zona di memoria pari a n*dim, adatta a contenere n variabili ampie dim e la inizializza a 0. Restituisce un puntatore a void che punta alla zona di memoria allocata, contenente un tipo di indefinito. avviene tramite uso di puntatori ed è eseguita da apposite funzioni. void *realloc(void *p, int n); lloca dinamicamente una zona di memoria pari a n byte e vi colloca il contenuto della zona di memoria puntata da p, tagliando l eventuale eccesso in caso di spazio insufficiente. Restituisce p o un nuovo puntatore a void, in caso debba essere usata una nuova zona di memoria. 1
2 TTEZIOE: Tutte le funzioni che consentono l allocazione dinamica restituiscono un puntatore in caso di allocazione non riuscita (memoria insufficiente o altro tipo di errore). Questa eventualità deve essere gestita per non incorrere in errori. Due funzioni utili La funzione sizeof(tipo_) Riceve un tipo di e ne restituisce la dimensione espressa in byte. La funzione typedef oggetto nome ssegna un alias all oggetto, che da uel momento può essere invocato attraverso nome. Esempi: lloca dinamicamente int *p; una zona di memoria p=(int *)malloc(sizeof(int)); pari alla dimensione di un intero e la fa puntare *p=28; da p. char *p; lloca dinamicamente una p=(char *)malloc(80); zona di memoria pari ad 80 p= albero ; byte (cioè 80 caratteri). Esempi: struct studente {char nome[80]; int ;} *p; p=(struct studente*)malloc(sizeof(struct studente)); lloca dinamicamente una zona di memoria pari alla dimensione di una struttura di tipo studente e la fa puntare da p. Esempi: struct studente {char nome[80]; int ;}; typedef struct studente st; st *p; p=(st *)malloc(sizeof(st)); La de-allocazione La memoria allocata dinamicamente persiste fino al termine del programma o finché non viene esplicitamente liberata dal programmatore. E possibile liberare lo spazio di memoria precedentemente allocato dinamicamente attraverso la funzione free (p); dove p è stato precedentemente allocato attraverso malloc, calloc o realloc. 2
3 Le strutture dati dinamiche ono strutture dati che possono variare la loro dimensione durante l esecuzione del programma e possono contenere dati eterogenei. In uesto corso studieremo: Le liste concatenate Le pile Le code Le liste concatenate ono seuenze lineari (messe in fila indiana) di unità di informazione (strutture ricorsive), in cui inserimenti e cancellazioni possono avvenire in ualunue punto della lista. Le strutture ricorsive ono strutture contenenti un puntatore ad oggetto dello stesso tipo. Intero Le liste concatenate Ogni elemento della lista è detto nodo e si crea al bisogno, mediante allocazione dinamica. I puntatori sono detti link. E necessario avere un puntatore t al primo nodo che indichi l della lista e che non venga spostato, altrimenti si perde la possibilità di accedere ai dati. E opportuno porre a il puntatore dell ultimo elemento in modo da segnalare la fine della lista. Intero Intero Intero ssegnazione valori ad un nodo Dopo avere creato il nodo desiderato, si procede come nelle strutture accedute mediante puntatori. struct referendum{char ; struct referendum *;}*p, *; typedef struct referendum r; p=(r*)malloc(sizeof(r)); p->= ; p->=; =p; p postarsi in una lista postarsi di un elemento p=; i usa un puntatore ausiliario per evitare di p=p->; perdere l della lista. correre l intera lista p=; while(p) p=p->; Modifica valori di un nodo Dopo avere individuato il nodo desiderato, si procede come nelle strutture accedute mediante puntatori. E necessario usare un puntatore ausiliario che scorra la lista fino a posizionarsi ii inel nodo desiderato. Esempio: p=; p=p->; p->= ; p p In alternativa è possibile assegnare i valori dei dati tramite scanf o copia di valori contenuti in altri dati. 3
4 Visualizzazione valori di un nodo Dopo avere individuato il nodo desiderato, mediante l uso di un puntatore ausiliario, si procede come nelle strutture accedute mediante puntatori. Esempio: p=; p=p ; printf( %c, p->); p p Visualizzazione di una intera lista #include<stdio.h> #include<stdlib.h> TTEZIOE: Il puntatore ini è una variabile locale. L della lista non viene spostato typedef struct elemento ele; agendo su ini. i voidstampa(ele*); stampa (ele * ini) {while(ini) { {printf( %d,ini->); stampa (); ini=ini->;} } Contare gli elementi di una lista #include<stdio.h> #include<stdlib.h> typedef struct elemento ele; int conta (ele * ini) int conta (ele * ); {int x=0; while(ini) {int n; {x++; n=conta (); ini=ini->;} return (x);} Le pile Le pile o liste LIFO (Last Input First Output) sono particolari liste concatenate in cui inserimenti e cancellazioni avvengono solo in testa. Creazione di una pila Per creare una pila è necessario: 1. Creare un singolo elemento ed inserire i dati 2. e l elemento creato è il primo posizionare l. ltrimenti collegare col precedente e spostare l 1. Ripetere da p p Creazione di una pila #include<stdio.h> #include<stdlib.h> typedef struct elemento ele; ele * creapila (ele * ini, int a) ele * creapila(ele *, int ); {ele *p; p=(ele *)malloc(sizeof(ele)); {ele *=; p->=a; p->=ini; =creapila(, n); } return(p);} 4
5 Creazione di una pila ele * creapila (ele * ini, int a) {ele *p; {ele *=; p=(ele *)malloc(sizeof(ele)); p->=a; =creapila(, n); } p->=ini; return(p);} Le code o liste FIFO (Fist Input First Output) sono particolari liste concatenate in cui gli inserimenti avvengono in coda e le eliminazioni in testa. Le code ini p p ini Creazione di una coda Per creare una coda è necessario: 1. Creare un singolo elemento ed inserire i dati 2. e l elemento creato è il primo posizionare l. ltrimenti scorrere fino alla fine della lista e collegare con l elemento creato. 1. Ripetere da p 51 p Creazione di una coda #include<stdio.h> #include<stdlib.h> typedef struct elemento ele; ele * creacoda(ele *, int ); {ele *=; =creacoda(, n); ele * creacoda (ele * ini, int a) {ele *p,*aux; p=(ele *)malloc(sizeof(ele)); p->=a; p->=; if(!ini) return(p); {aux=ini; while(aux->) aux=aux->; aux->=p; return(ini);} Creazione di una coda {ele *=; =creacoda(, n); 36 ini p ele * creacoda (ele * ini, int a) {ele *p,*aux; p=(ele *)malloc(sizeof(ele)); p->=a; p->=; if(!ini) return(p); {aux=ini; while(aux->) aux=aux->; aux->=p; return(ini);} Creazione di una coda {ele *=; =creacoda(, n); ini aux p ele * creacoda (ele * ini, int a) {ele *p,*aux; p=(ele *)malloc(sizeof(ele)); p->=a; p->=; if(!ini) return(p); {aux=ini; while(aux->) aux=aux->; aux->=p; return(ini);} 5
6 Inserimento nodo in lista concatenata L inserimento di un nodo in una lista può avvenire in testa (LIFO), in coda (FIFO) o in un punto intermedio della lista. E bene deputare gli inserimenti ad apposite funzioni. =(r *)malloc(sizeof(r)); ->= ; ->=; =; Inserimento in testa La funzione deve restituire l =(r *)malloc(sizeof(r)); ->= ; ->=; aux=; while(aux->) aux=aux->; aux->=; Inserimento in coda La funzione non deve restituire nulla perché l non è stato spostato. aux aux Inserimento nodo dopo un elemento assegnato 1. corro la lista fino a posizionarmi nel punto desiderato. E necessario usare un puntatore ausiliario che scorra la lista fino a posizionarsi nel nodo in cui fare l inserimento senzaperderel l. 2. e il punto desiderato è stato trovato a) Creo il nuovo elemento b) Creo i collegamenti. Per non perdere i collegamenti è necessario collegare prima il nuovo elemento al successivo della lista e poi il precedente al nuovo elemento. Inserimento nodo dopo un elemento assegnato void inserisci_dopo(r*, int info, int dove) {r*, *aux; aux=; while(aux && (aux->!=dove)) aux=aux->; if(aux) {=(r *)malloc(sizeof(r)); ->=info; ->=aux->; aux->=;} aux aux Inserimento nodo prima di un elemento assegnato 1. corro la lista (mediante puntatore ausiliario) fino a posizionarmi nel nodo precedente a uello desiderato. 2. e il punto desiderato è stato trovato a) Creo il nuovo elemento b) Creo i collegamenti. Per non perdere i collegamenti è necessario collegare prima il nuovo elemento al successivo della lista e poi il precedente al nuovo elemento. e il punto desiderato è il primo elemento effettuo un inserimento in testa. ltrimenti stampo un messaggio. Inserimento nodo prima di un elemento assegnato r* inserisci_prima(r*, int info, int dove) {r *,*aux; if(->==dove) {=(r *)malloc(sizeof(r)); ->=info; ->=; =;} {aux=; while(aux-> && (aux->->!=dove)) aux=aux->; if(aux->) {=(r *)malloc(sizeof(r)); ->=info; ->=aux->; aux->=;} return ();} 6
7 Inserimento nodo prima di un elemento assegnato if(->==dove) {=(r *)malloc(sizeof(r)); ->=info; ->=; =;} { return(); Inserimento nodo prima di un elemento assegnato if {aux=; aux aux while(aux-> t&& (aux->->!=dove)) >d t d aux=aux ; if(aux->) {=(r *)malloc(sizeof(r)); ->=info; ->=aux->; aux->=;} return ();} 1. e l elemento da cancellare è il primo sposto l e libero l area di memoria. 2. ltrimenti scorro la lista (mediante puntatore ausiliario) fino a posizionarmi nel nodo precedente a uello desiderato. 3. e il punto desiderato è stato trovato a) Posiziono un puntatore nell area da cancellare b) Creo i collegamenti c) Libero l area di memoria ltrimenti stampo un messaggio. 4. Restituisco l. r* cancella(r*, int dove) {r *killer,*aux; if(->==dove) {killer=; =->; free(killer);} {killer=; while( killer-> && (killer->->!=dove) >d t d ) killer=killer->; if(killer->) {aux=killer->; killer->=aux->; free(aux); } return ();} if(->==dove) {killer=; =->; free(killer);} { return(); killer if {killer=; killer aux while(killer-> && (killer->->!=dove)) killer=killer ; if(killer->) {aux=killer->; killer->=aux->; free(aux); } return ();} 7
8 if {killer=; killer killer aux while (killer-> && (killer->->!=dove) ) killer=killer ; if(killer->) {aux=killer->; killer->=aux->; free(aux); } return ();} Ordinamento di una lista (per selezione) Ho necessità di due puntatori p1 e p2 che puntino a due elementi successivi da confrontare e di un terzo puntatore min che punti all elemento minimo. 1. Posiziono min all della lista e considero il puntato come minimo. ii Posiziono i p1 all i i dll della lista 2. Posiziono p2 nell elemento successivo a p1. corro la lista usando p2. 3. e trovo un elemento minore di uello puntato da min effettuo lo scambio. 4. posto p1 di una posizione e ripeto da 2. Ordinamento di una lista (per selezione) 1 Ordinamento di una lista (per selezione) 2 void ordina(r* ) {r *p1,*p2,*min; char park; p1=; while( p1->) {p2=p1->; min=p1; while(p2) min p1 {if(p2-> < min->) min=p2; p2=p2->;} min p2 p2 void ordina(r* ) {r *p1,*p2,*min; char park; p1=; while( p1->) {p2=p1->; min=p1; while(p2) {if(p2-> < min->) min=p2; p2=p2->;} min p1 min p2 } if(min!=p1) {park=p1->; p1->=min->; min->=park;} p1=p1->;} } if(min!=p1) {park=p1->; p1->=min->; min->=park;} p1=p1->;} Ordinamento di una lista (per selezione) 3 void ordina(r* ) {r *p1,*p2,*min; char park; p1=; while( p1->) {p2=p1->; min=p1; while(p2) {if(p2-> < min->) min=p2; p2=p2->;} p1 } if(min!=p1) {park=p1->; p1->=min->; min->=park;} p1=p1->;} 8
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
DettagliAllocazione 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
DettagliGestione della memoria
Gestione della memoria Stefano Ferrari Università degli Studi di Milano stefano.ferrari@unimi.it Programmazione anno accademico 2017 2018 Allocazione di memoria A una variabile puntatore si può assegnare
DettagliListe 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
DettagliStrutture 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
DettagliLaboratorio 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
DettagliListe 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
DettagliIntroduzione. 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):
DettagliPolitecnico 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
DettagliIl 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;
DettagliStrutture Dati Dinamiche
Strutture Dati Dinamiche Motivazioni Le variabili considerate fino a questo punto devono essere dichiarate staticamente, ossia la loro esistenza, il loro nome e la loro dimensione devono essere previsti
DettagliIntroduzione al C Lez. 4
Introduzione al C Lez. 4 Allocazione Dinamica della memoria http://www.di.unipi.it/~rossano/algo1/lez4.pdf Allocazione dinamica memoria In C la memoria può essere anche gestita in modo dinamico, attraverso
DettagliTitolo 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
DettagliL'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
DettagliPreviously 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
DettagliPreviously 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
DettagliIntroduzione al C Lez. 4. Allocazione Dinamica della memoria
Introduzione al C Lez. 4 Allocazione Dinamica della memoria Allocazione dinamica memoria In C la memoria può essere anche gestita in modo dinamico, attraverso l allocazione esplicita di blocchi di memoria
DettagliGestione 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.
DettagliEsercitazioni 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
DettagliEsercitazione 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
DettagliLa 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
DettagliLezione 12: Allocazione Dinamica della Memoria
Lezione 12: Allocazione Dinamica della Memoria Laboratorio di Elementi di Architettura e Sistemi Operativi 17 Aprile 2013 Puntatori e vettori Puntatori ed indirizzi Semplificando, la memoria di un computer
DettagliFondamenti 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
DettagliInformatica 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)
Dettagli10/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
DettagliDiversi 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
DettagliAllocazione 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
DettagliIMPLEMENTAZIONE 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
DettagliImplementazione di Liste puntate
Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Implementazione di Liste puntate 2 1 Indice Liste puntate semplici: Gli elementi sono logicamente
Dettaglidott. 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;
DettagliStrutture. 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
DettagliListe 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
DettagliTipi astratti pila e coda
Tipi astratti pila e coda Una pila è un tipo astratto che consente di rappresentare un insieme di elementi in cui ogni eliminazione ha per oggetto l elemento che è stato inserito per ultimo. Questa disciplina
DettagliAllocazione Dinamica della memoria
Allocazione dinamica Allocazione Dinamica della memoria I Il C mette a disposizione delle primitive per la gestione dinamica della memoria, grazie all utilizzo di alcune funzioni messe a disposizione dalla
DettagliL'allocazione dinamica della memoria
L'allocazione dinamica della memoria Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino I puntatori Le variabili di tipo puntatore permettono di accedere alla memoria
DettagliL'allocazione dinamica della memoria
L'allocazione dinamica della memoria Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino I puntatori Le variabili di tipo puntatore permettono di accedere alla memoria
DettagliDispensa 18 CORSO DI PROGRAMMAZIONE A.A CORSO DI LAUREA IN INGEGNERIA E SCIENZE INFORMATICHE CESENA. Laboratori
ORSO I LURE IN INGEGNERI E SIENZE INFORMTIHE ESEN ORSO I PROGRMMZIONE.. 2016-17 ispensa 18 Laboratori ott. Mirko Ravaioli e-mail: mirko.ravaioli@unibo.it http://www.programmazione.info orso di Programmazione..
DettagliIntroduzione 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
DettagliLezione 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)
DettagliEsercitazioni 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
DettagliLezione 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
DettagliOgni 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
DettagliListe concatenate e allocazione dinamica
Liste concatenate e allocazione dinamica Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2017/2018 Calendario delle lezioni Ogni lezione consta di una spiegazione assistita da slide,
DettagliALGORITMI 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
DettagliLezione 6 Struct e qsort
Lezione 6 Struct e qsort Rossano Venturini rossano.venturini@unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Struct Struct Fino ad ora abbiamo utilizzato
DettagliLezione 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
DettagliRappresentazione 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
DettagliNella scorsa lezione: Array multidimensionali. Mappa di memorizzazione. Esempio: ordinamento di parole. Argomenti di main.
Nella scorsa lezione: Array multidimensionali. Mappa di memorizzazione. Esempio: ordinamento di parole. Argomenti di main. Puntatori a funzioni. Array di puntatori a funzioni. Esempio: ordinamento di parole
Dettagliin alternativa Quanto spazio occupa in memoria una variabile di tipo struct? dipende...
Strutture Mentre un array consente di raggruppare, sotto un unico nome, vari elementi tutti dello stesso tipo, una struttura permette di gestire, mediante un unico nome, elementi di QUASI tutti i tipi.
Dettagli4 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
DettagliE12 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
DettagliStruct, enum, Puntatori e Array dinamici
Struct, enum, Puntatori e Array dinamici Tratti dal corso del Dr. Francesco Fabozzi Corso di Informatica Tipi di dato in C Abbiamo esaminato diversi tipi di dato che il C mette a disposizione dell utente
DettagliAllocazione 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
DettagliConsideriamo un vettore allocato dinamicamente
Libreria per per la la gestione/manipolazione dei dei vettori Consideriamo un vettore allocato dinamicamente int * v; v = (int *) malloc (n * sizeof (int) ); Conversione di tipo da void * a int * Numero
DettagliUnità 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;
DettagliLa 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
Dettagli5. 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
DettagliFondamenti 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
DettagliFondamenti 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
DettagliLaboratorio di Algoritmi e Strutture Dati
Laboratorio di Algoritmi e Strutture Dati Prof. Aniello Murano Implementazioni di Liste Puntate Semplici Corso di Laurea Codice insegnamento Email docente Anno accademico Informatica 13917 murano@na.infn.it
DettagliLinguaggio 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
DettagliCorso di Informatica A.A
Corso di Informatica A.A. 2009-2010 Lezione 12 Corso di Informatica 2009-2010 Lezione 12 1 Allocazione dinamica della memoria La funzione calloc() La funzione calloc() alloca memoria dinamicamente. Numero
Dettagli! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente
! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente!!la loro esistenza deve essere prevista e dichiarata a priori! Questo può rappresentare un problema soprattutto per variabili
DettagliTecniche della Programmazione, M.Temperini, Liste Concatenate 3 1/18
Tecniche della Programmazione, M.Temperini, Liste Concatenate 3 1/18 Eliminazione di un elemento da una typedef int TipoElem; int main() { TipoLista ; TipoElem ; /* costruzione */ /* l'el. da eliminare
DettagliLinguaggio C. Esercizio 1
Linguaggio C Esercizi su puntatori e liste Walter Didimo (e-mail:didimo@dia.uniroma3.it) supplemento al Corso di Calcolatori Elettronici (Riccardo Torlone) 1 Esercizio 1 Siano p e q due puntatori a variabili
DettagliVariabili 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
DettagliStrutture dati dinamiche in C (II)
Strutture dati dinamiche in C (II) Laboratorio di Linguaggi di Programmazione a.a. 2001/2002 dott.ssa Francesca A. Lisi lisi@di.uniba.it Sommario Le liste concatenate (ancora ma in modo più formale) L
DettagliCorso di Informatica A.A
Corso di Informatica A.A. 2009-2010 Lezione 15 Corso di Informatica 2009-2010 Lezione 15 1 Liste concatenate Liste concatenate Una lista concatenata costituisce un metodo molto utile per immagazzinare
DettagliPuntatori e Heap in C. Prof.Ing.S.Cavalieri
Puntatori e Heap in C Prof.Ing.S.Cavalieri Tipi Puntatori #include int n; int * p; int main(void) { n = 15; p = &n; NULL int n, *p; printf("\nil Numero n e' uguale a : %d ",n); *p = 25; printf("\nil
DettagliStrutture 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
DettagliProf. 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
DettagliStrutture 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));
DettagliPuntatori. Operazioni sui puntatori Allocazione dinamica
Puntatori Operazioni sui puntatori Allocazione dinamica Puntatori a void la parola chiave void può essere usata per dichiarare dei puntatori che non puntano a nessun tipo di dato in particolare void *ptr;
DettagliLaboratorio di algoritmi e strutture dati
Laboratorio di algoritmi e strutture dati G. Melideo CdL in Informatica A.A. 2009/2010 G. Melideo (CdL in Informatica) Laboratorio di algoritmi e strutture dati A.A. 2009/2010 1 / 23 Indice 1 Richiami
DettagliINFORMATICA 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
DettagliGestione 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
DettagliStringhe e allocazione dinamica della memoria
Stringhe e allocazione dinamica della memoria Esercizio Scrivere un programma strings.c che legge da standard input una sequenza di parole separate da uno o più spazi, e stampa le parole lette, una per
DettagliStrutture 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
DettagliCorso 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)
DettagliLa 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
DettagliI puntatori e l allocazione dinamica di memoria
I puntatori e l allocazione dinamica di memoria Vettori dinamici Matrici dinamiche Liste 2 2006 Politecnico di Torino 1 Vettore dinamico Si dice vettore dinamico un vettore la cui dimensione è nota solo
DettagliLaurea In Ingegneria dell Informazione. Esercitazioni Guidate di Tecniche della Programmazione
Laurea In Ingegneria dell Informazione Esercitazioni Guidate di Tecniche della Programmazione Note introduttive: 1) Le soluzioni agli esercizi e le versioni di programmi menzionate nel testo delle esercitazioni
DettagliAllocazione dinamica della memoria
Università degli Studi di Milano Corso di Laurea in Informatica, A.A. 2017-2018 Allocazione dinamica della memoria Homepage del corso Turno A Nicola Basilico Dipartimento di Informatica Via Comelico 39/41-20135
DettagliListe con sentinella. intlist *createlist(void){ intlist *q = malloc(sizeof(intlist)); if(!q) { exit(-1); } q->next = q->prev = q; return q; }
Liste con sentinella Un ulteriore semplificazione delle operazioni sulle liste si ottiene utilizzando un elemento sentinella (dummy) che non contiene informazione, ma serve a segnalare la fine e l inizio
DettagliLISTE E RIPASSO. Sesto Laboratorio
LISTE E RIPASSO Sesto Laboratorio STRUTTURE E LISTE RIVEDIAMO LE STRUTTURE typedef struct anagrafico{ char nome[20]; int anni; char indirizzo[30]; dati; cittadino.anni = 3; dati popolazione[1000]; Scrivere
DettagliPUNTATORI. 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
Dettaglicons: 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 (...),
DettagliL Allocazione Dinamica della Memoria
L Allocazione Dinamica della Memoria Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario Questo documento
DettagliProgrammazione 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
DettagliI puntatori e l allocazione dinamica di memoria
I puntatori e l allocazione dinamica di memoria L allocazione delle variabili Allocazione e rilascio espliciti di memoria Le funzioni malloc e free 2 2006 Politecnico di Torino 1 Allocare = collocare in
DettagliListe a puntatori: un esercizio passo passo
Liste a puntatori: un esercizio passo passo Prof. Orazio Mirabella Liste a puntatori: un esercizio passo passo (for dummies) Prof. Orazio Mirabella 1 Ripassiamo le Liste lineari Una lista lineare è una
DettagliLaboratorio 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
DettagliIL CONCETTO DI LISTA!
Liste semplici Obiettivi: Discutere la realizzazione collegata (puntatori a strutture) di liste semplici Introdurre l ADT lista semplice e le operazioni tipiche su essa 1 IL CONCETTO DI LISTA Una lista
DettagliGestione 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
DettagliLa 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
DettagliPolitecnico 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