LISTE
lista semplice (o
lineare) = è una successione di elementi omogenei che
occupano in memoria una posizione qualsiasi; ciascun elemento
contiene una o più informazioni, e un puntatore per mezzo del
quale è legato al successivo

Indichiamo con info
la parte informazione di ogni elemento, con coda la parte
puntatore e con lista il puntatore al primo elemento della
lista

lista vuota = lista
priva di elementi, rappresentata da lista che punta a NULL

La parte informazione
(info) dell’elemento dipende dal tipo di dati che stiamo
trattando: può essere un tipo semplice o derivato
ALBERI BINARI
struct{
int
val;
struct
A* sin;
struct
A* des;
};
è più
comodo definire queste variabili nello heap perchè il
vantaggio di queste strutture è la dinamicità:
supponiamo di avere un array e di voler eliminarne un elemento
interno: copio tutti gli elementi successivi nelle rispettive caselle
precedenti, ma sarebbe meglio eliminare l'ultima che rimane vuota; se
utilizzo lo heap sarà sufficiente cambiare l'indirizzo di un
puntatore ed eliminare dalla memoria la variabile non più
utiizzata
l'ultimo elemento della
lista concatenata dovrà contenere un puntatore a NULL (a meno
che l'ultimo elemento non punti al primo)
commenti alle slide
sulle liste:
typedef
struct T{
t1
a;
t2
b;
struct
t* c;
}elemento;
typedef
elemento * lista;
lista
l;
l
= NULL; // lista vuota
l
= (elemento*) malloc (sizeof(elemento));
oppure:
l
= (lista) malloc (sizeof(elemento));
dereferenzio lista e
seleziono il campo nome:
lista
-> nome;
"return lista"
della procedura crea mi restituisce un indirizzo
prima applica la
freccia e poi l'operatore &:
&lista->eta ;
ESERCIZIO DI
RIEPILOGO:
si considerino le
seguenti definizioni di procedura:
char sempre_a (char
x){return 'a'}
char sempre_b (char
x){return 'b'}
si definisca il
tipo sempre_k a cui appartengono entrambe
dichiarare una
variabile di tipo sempre_k ed inizializzarla a sempre_a
dichiarare un
array di tipo sempre_k di 2 elem. ed inizializzarlo assegnando ad
entrambi gli elementi il valore sempre_b
usando l'array
applicare il 1° elemento dell'array passandogli il risultato del
secondo elemento dell'array chiamato con 'a' (si tratta
dell’esecuzione di una funzione)
typedef
char(*Sempre_k) (char x);
Sempre_k
l = sempre_a
Sempre_k
a[2] = {sempre_b, sempre_b}
char
h; h = *(a[1])((*(a[0]))('a'));
|