STRUTTURE DI DATI IN C
Tipo astratto di dato
Un tipo astratto di dato è costituito da un insieme di elementi e da una collezione di operazioni eseguibili
sugli elementi dell’insieme
Strutture lineari
• Lista
Lista unidirezionale
Pila
Coda
Lista bidirezionale
Strutture non lineari
• Grafo
• Albero
CdL Ingegneria Informatica n.o.
Anno Accademico 2007/08
Giacomo Piscitelli
Fondamenti di Informatica I – corso A
pag. 1/1
STRUTTURE DI DATI IN C
Strutture lineari
La lista
Definizione del tipo astratto
• Struttura lineare di elementi omogenei
• Operazioni: Inserimento
Cancellazione
Ricerca
Testa
CdL Ingegneria Informatica n.o.
Anno Accademico 2007/08
Giacomo Piscitelli
Fondamenti di Informatica I – corso A
pag. 2/2
STRUTTURE DI DATI IN C
Strutture lineari
La pila (stack)
Definizione del tipo astratto
• Struttura costituita da un numero variabile di elementi omogenei con la proprietà che in
qualunque momento sia possibile estrarre soltanto l’ultimo elemento inserito: Accesso LIFO (Last
In First Out)
• Operazioni: Inserimento (Push)
Estrazione (Pop)
Lettura del contenuto del top (Top)
Inserimenti
Estrazioni
Top
CdL Ingegneria Informatica n.o.
Anno Accademico 2007/08
Giacomo Piscitelli
Fondamenti di Informatica I – corso A
pag. 3/3
STRUTTURE DI DATI IN C
Strutture lineari
La coda
Definizione del tipo astratto
• Struttura costituita da un numero variabile di elementi omogenei con la proprietà che il primo
elemento inserito sarà il primo ad essere estratto: Accesso FIFO (First In First Out)
• Operazioni: Inserimento
Estrazione
Estrazioni
Inserimenti
Coda
CdL Ingegneria Informatica n.o.
Testa
Anno Accademico 2007/08
Giacomo Piscitelli
Fondamenti di Informatica I – corso A
pag. 4/4
STRUTTURE DI DATI IN C
Strutture non lineari
Il grafo
Definizione.
Un grafo G=<V,A> consiste in un insieme V finito di elementi detti nodi o vertici e da un insieme A di
archi che collegano coppie di nodi.
Caratterizzazione:
• Grafo orientato
• Grafo non orientato
CdL Ingegneria Informatica n.o.
Anno Accademico 2007/08
Giacomo Piscitelli
Fondamenti di Informatica I – corso A
pag. 5/5
STRUTTURE DI DATI IN C
Strutture non lineari
L’albero
Definizione.
Dato un insieme prefissato E di elementi. Un albero:
può essere vuoto
consistere di un solo elemento e∈E detto nodo
consistere di un nodo e∈E collegato mediante archi diretti a un numero finito di altri alberi
Cammino
il livello e la profondità (o
altezza)
il grado di ingresso e di uscita
il grado massimo di uscita
il bilanciamento
Radice
Lunghezza del
Cammino=
N°nodi -1=N°archi
Livello
Foglie
CdL Ingegneria Informatica n.o.
Anno Accademico 2007/08
Giacomo Piscitelli
Fondamenti di Informatica I – corso A
pag. 6/6
STRUTTURE DI DATI IN C
Strutture non lineari
L’albero
Operazioni
• Inserimento
• Ricerca
• Visita (Rappresentazione lineare o linearizzazione) (cfr. appunti “Linearizzazione alberi”)
• Cancellazione
• Bilanciamento
CdL Ingegneria Informatica n.o.
Anno Accademico 2007/08
Giacomo Piscitelli
Fondamenti di Informatica I – corso A
pag. 7/7
STRUTTURE DI DATI IN C
Strutture non lineari
L’albero binario
Operazioni
• Inserimento
• Ricerca
• Visita (Rappresentazione lineare o linearizzazione) (cfr. appunti “Linearizzazione alberi”)
Postordine
Preordine
Inordine
• Cancellazione
• Bilanciamento
Cammino
Radice
Lunghezza del
Cammino=
N°nodi -1=N°archi
Livello
Foglie
CdL Ingegneria Informatica n.o.
Anno Accademico 2007/08
Giacomo Piscitelli
Fondamenti di Informatica I – corso A
pag. 8/8
STRUTTURE DI DATI IN C
Realizzazione di strutture lineari
Allocazione statica della memoria
La pila e la coda possono essere rappresentate nella memoria di un calcolatore utilizzando un array.
Svantaggi derivanti dall’uso di strutture realizzate mediante array:
• E’ necessario definire a priori la cardinalità delle informazioni trattate
• Non è possibile gestire una quantità variabile di dati in funzione di esigenze note solo
durante l’esecuzione del programma, variabili durante l’esecuzione
CdL Ingegneria Informatica n.o.
Anno Accademico 2007/08
Giacomo Piscitelli
Fondamenti di Informatica I – corso A
pag. 9/9
STRUTTURE DI DATI IN C
Realizzazione di strutture lineari
Allocazione dinamica della memoria
• Gestione dinamica della memoria per memorizzare una quantità variabile di dati in funzione di
esigenze note solo durante l’esecuzione del programma e modificabili durante l’esecuzione
Caratteristiche dell’allocazione dinamica
L’allocazione dinamica consente di modificare la struttura dati in fase di esecuzione, permettendo di:
• Aggiungere un nuovo elemento nell’area dati di un programma in fase di esecuzione
• Eliminare l’elemento di memorizzazione in fase di cancellazione del dato stesso
Riferimento a dati gestiti dinamicamente
Il riferimento ai nuovi elementi di memorizzazione non può avvenire mediante identificatori
Soluzione
• Uso di puntatori
• Creazione di un nuovo elemento e restituzione di un riferimento al dato stesso
CdL Ingegneria Informatica n.o.
Anno Accademico 2007/08
Giacomo Piscitelli
Fondamenti di Informatica I – corso A
pag. 10/10
STRUTTURE DI DATI IN C
Allocazione di memoria
MALLOC
La funzione malloc consente l’allocazione della memoria necessaria a contenere una variabile del tipo
specificato.
Sintassi della malloc:
puntatore=malloc(sizeof (Tipo del dato));
Restituisce nel puntatore l’indirizzo di memoria dell’area creata in memoria.
CdL Ingegneria Informatica n.o.
Anno Accademico 2007/08
Giacomo Piscitelli
Fondamenti di Informatica I – corso A
pag. 11/11
STRUTTURE DI DATI IN C
Rilascio o deallocazione di memoria
FREE
La funzione free consente la deallocazione della memoria che è stata allocata mediante la funzione
malloc
Sintassi della free:
free(puntatore);
Elimina dal puntatore l’indirizzo di memoria dell’area precedentemente creata rendendola disponibile
per altre operazioni di malloc
CdL Ingegneria Informatica n.o.
Anno Accademico 2007/08
Giacomo Piscitelli
Fondamenti di Informatica I – corso A
pag. 12/12
STRUTTURE DI DATI IN C
Gestione della memoria della macchina astratta di un programma
Durante l’esecuzione dei programmi la memoria della macchina astratta dei programmi viene
partizionata in due aree disgiunte:
• Stack contiene le aree dati corrispondenti alle variabili dichiarate nelle funzioni a livello globale e
locale mediante i record di attivazione
• Heap contiene le variabili create dinamicamente
Area dati
della
funzione
Punt
5
Stack
CdL Ingegneria Informatica n.o.
Anno Accademico 2007/08
Giacomo Piscitelli
Heap
Fondamenti di Informatica I – corso A
pag. 13/13
STRUTTURE DI DATI IN C
Inconvenienti derivanti da una errata gestione dell’allocazione
Garbage production
La memoria allocata per una variabile puntata
risulta inaccessibile
Dangling references
Crea riferimenti ad aree di memoria non più
esistenti
CdL Ingegneria Informatica n.o.
Anno Accademico 2007/08
Giacomo Piscitelli
P = malloc(sizeof(Dato));
P=Q;
P = Q;
free(Q);
Fondamenti di Informatica I – corso A
pag. 14/14