Fasi della programmazione - Home di homes.di.unimi.it

annuncio pubblicitario
Strutture dati e
loro organizzazione
Gabriella Trucco
Introduzione
 I linguaggi di programmazione di alto livello consentono di far riferimento a
posizioni nella memoria principale tramite nomi descrittivi (variabili) anziché
indirizzi numerici
 Dato: un particolare valore che una variabile può assumere
 Tipo di dato: modello matematico che caratterizza l'insieme di valori che
una variabile può assumere, e le operazioni che possono essere eseguite su
di essa
Tipi di dato primitivi
 Intero
 dati numerici costituiti da numeri interi
 Operazioni: aritmetiche e confronto
 Reali
 dati numerici costituiti da numeri non interi
 Operazioni simili a interi
 Booleani
 Vero/falso
 Operatori dell’algebra booleana, confronto
 Caratteri
 Dati alfanumerici
 Operazioni: concatenazione, confronto
Struttura dati
 Un modo per memorizzare e organizzare i dati e rendere efficiente
l’accesso e la modifica dei dati stessi
 Esempi: array, matrici, grafi, alberi, tabelle hash, heap, liste, code, pile, ...
 Una struttura dati consiste di:
 un modo sistematico di organizzare i dati
 un insieme di operatori che permettono di manipolare gli elementi della struttura
Struttura dati
 Statiche: la dimensione è definita al momento della creazione. Una volta
terminato lo spazio allocato, è necessario creare un’altra struttura di
dimensione maggiore dello stesso tipo e copiarvi dentro il contenuto della
prima
 Array, record
 Dinamiche: la dimensione della struttura dati può variare nel tempo senza
limite. L’unico limite è la quantità di memoria disponibile nella macchina su
cui andrà in esecuzione l’applicazione
 Liste, code, pile, alberi, grafi
Strutture dati
 Lineari: i dati sono disposti in sequenza e possono essere nominati come
primo, secondo, terzo, ...
 Non lineari: i dati non sono disposti in sequenza
 Omogenee: i dati sono tutti dello stesso tipo
 Non omogenee: i dati sono di tipi diverso
 Esempio: il tipo di dato array rappresenta una struttura dati lineare,
omogenea, a dimensione fissa
Struttura dati
 Nozione astratta svincolata dalla concreta rappresentazione della struttura
nel modello di calcolo
 Implementazione: descrive il modo con il quale la struttura è memorizzata e
viene gestita dal calcolatore
 Ogni struttura dati ammette più implementazioni con un costo diverso
 Spazio di memorizzazione
 Tempo per l’esecuzione delle operazioni primitive sulla struttura
Array
 In alcuni casi, informazione da elaborare consiste di un’aggregazione di
valori anziché un solo valore
 Utile indicare l’insieme di valori con una sola variabile: variabile di tipo
strutturato
 Array: Insieme di variabili, tutte dello stesso tipo, identificato da un nome
unico.
 Gli elementi dell’array sono disposti in memoria in posizioni consecutive.
Definizione di array
 Specificare:
 Nome della variabile
 Tipo di elementi
 Numero di elementi presenti (cardinalità dell’array
 ESEMPI
 Definizione di una variabile array v contenente 20 interi:
int v[20];
 Definizione di una variabile array w contenente 10 float:
float w[10];Estelar)
Accesso agli elementi di un array
 Specificare
 il nome della variabile
 La posizione dell’elemento tramite un valore intero (indice)
 v[0]: primo valore dell’array
 v[N-1]: N-mo elemento
Inizializzazione di un array
Operazioni
 Inizializzazione: operazione di input per ciascuno degli elementi
 Stampa: fare la stampa di ognuno degli elementi.
 Quale costrutto usare?
 Ciclo iterativo
 Esempio
int v[5]={23, 2, 4, 3, 54}
for (i=0; i<5; i++) print v[i];
Ricapitolando…
 Array = blocco di elementi dello stesso tipo
 struttura dati statica e omogenea, usata in molti linguaggi di programmazione
ispirata alla nozione matematica di vettore, (o di matrice, nel caso di array
bidimensionali).
 sorta di casellario: le cui caselle sono dette celle dell'array stesso.
 Ogni cella come una variabile tradizionale che rappresenta un elemento
dell'array; tutte le celle sono variabili di uno stesso tipo preesistente, detto tipo
base dell'array.
 array di interi, array di stringhe, array di caratteri…
 Ciascuna delle celle dell'array è identificata da un valore di indice.
 indice numerico con valori che assumono numeri interi contigui che partono da 0 o
da 1
 cella di indice 0, di indice 1, e, in generale, di indice N, dove N è un intero compreso
fra 0 (o 1) e il valore massimo per gli indici dell'array.
Array
 Implementazione di un array A di n elementi di tipo primitivo (int, char, ...):
 è memorizzato in n celle consecutive a partire da un indirizzo ind A
 Scorrimento sequenziale tramite un ciclo iterativo in tutti i suoi elementi o a
partire da alcuni di essi oltre a poter accedere singolarmente ad una sua
generica posizione.
 il tempo di accesso ad un generico elemento i è uguale al tempo di
accesso della cella di indirizzo ind A+ i , quindi è costante
int vettore[5]; // definisce "vettore" come array di 10 elementi interi
vettore[0] = 3; // assegna il valore "0" alla cella di indice 0
vettore[1] = 2;
vettore[2] = 5;
vettore[3] = 0;
vettore[4] = 3;
Array bidimensionali
 Matrici: necessari due indici per identificare un elemento dell’array
 Per definire un array bidimensionale, è necessario specificare:
 il nome della variabile array
 il tipo degli elementi
 il numero degli elementi presenti nelle due dimensioni (cardinalità di riga e
cardinalità di colonna dell’array)
 Es: double mat [10][10];
Esempio
Array multidimensionali
 Un indice per ogni dimensione
 ogni elemento è identificato dalla combinazione di valori di tutti gli indici
del vettore
Esempio di matrice: immagine bitmap
 Costituita da una griglia di n × m punti (dot o pixel) colorati
 n:l numero di righe di punti (pixel rows)
 m: numero di colonne di punti (pixel columns)
Esempio: immagine 32×32 (ingrandita)
Qualità immagine bitmap
 Dipende da:
 numero di punti nell’immagine (pixel count)
 numero dei colori: profondità di colore (color depth)
 Maggiori sono il numero di punti e la profondità di colore, maggiore è la
qualità
 purtroppo aumenta anche la dimensione
 Occorre tenere sempre conto dell’impiego dell’immagine
Esempi
 Es1: immagine 35×35 in due colori, bianco e nero, ingrandita, di un
carattere per lo schermo
 numero di punti e colori molto basso, ma sufficiente
 Es2: immagine 1600×1200=1.92 Mpixel, in 224 = 16777216 colori, ridotta
Profondità di colore
 I colori percepiti variano in modo continuo
 Nelle immagini digitali si utilizzano colori tratti da un insieme finito,
rappresentabile con un numero finito di bit. Tale numero è la profondità di
colore (color depth), o risoluzione cromatica, dell’immagine.
 Profondità di colore maggiormente usate:
 1 bit: il pixel può essere solo bianco o nero
 8 bit: il pixel può avere uno tra 28 = 256 differenti colori.
 16 bit: 216 = 65536 (“64k”) colori
 18 bit: 262144 (“256k”) colori
 24 bit: 224 colori. La profondità è detta True Color.
Profondità di colore
Record
 Record (o tipo aggregato) = blocco di dati in cui elementi diversi possono appartenere a
tipi diversi
 Struttura dati che può essere eterogenea o omogenea.
 Combinazione di elementi che possono essere di diverso tipo, ad esempio un intero, un
numero in virgola mobile e un carattere testuale.
 Gli elementi che lo compongono sono detti anche campi, e sono identificati da un nome.
 Struct del linguaggio C
Struct {
char Nome[25];
int Età;
}Impiegato;
Scarica