Professional Documents
Culture Documents
Corso di Programmazione I
Contenitori
Contenitori
In quasi tutti i casi reali necessario creare e
operare su collezione di elementi
Una classe il cui obiettivo principale fornire una
astrazione di una collezione di elementi detta
contenitore
La libreria standard del C++ offre molte classi
contenitore
Due dei contenitori fondamentali sono il tipo
vettore (vector) e il tipo lista (list) che vengono
utilizzati anche per costruire altri contenitori
Contenitori trattati in questo corso
Collezioni (o elenchi) lineari di singoli elementi, rappresentate
mediante:
Vettore
Rappresentazione statica o dinamica con array monodimensionale
Lista
Rappresentazione con lista dinamica a puntatori (a concatenazione singola)
Pila
Rappresentazione mediante vettore
Rappresentazione con lista dinamica a puntatori
Coda
Rappresentazione mediante vettore
Rappresentazione con lista dinamica a puntatori
Contenitori
I contenitori possono essere classificati in base
alla politica di gestione degli elementi (strategia di
accesso agli elementi):
Nessuna
Ordinata
FIFO (First In First Out) CODA
LIFO (Last In First Out) PILA
Esempio di progettazione
LISTA ORDINATA
nome domini semantica notazione
operazioni
Start L Inizializza la lista: Start(l)
produce lista vuota
0 1 N-1
nelem
Rappresentazione con array
struct Record {
E v[N];
int nelem;
};
Rappresentazione con array
Collezione ordinata
Le operazioni devono garantire lordinamento
La gestione onerosa perch richiede lo spostamento
fisico degli elementi in caso di inserimento e
eliminazione
ADT Pila
N-1 nelem
ADT Coda: rappresentazione con array
(coda circolare)
Start Pop
nelem=0; e=q[t];
t=c=0; t=(t+1)%N;
Append nelem--;
q[c]=e; Empty
c=(c+1)%N; nelem==0;
nelem++; Full
nelem==N;
Lincremento degli indici-puntatori effettuato
modulo N
Rappresentazione con lista dinamica a
puntatori
Struttura dati
Richiede la dichiarazione di un tipo Record
costituita da un puntatore al tipo Record che
rappresenta la testa della lista
Gli elementi della lista vengono allocati
dinamicamente
l
Rappresentazione con lista dinamica a
puntatori
01011001 01011010
5 01011010 6 01011011
typedef int E;
struct Record; //pre-dichiarazione del tipo Record
typedef Record* L;
struct Record {
E elem; // campo informazione
L punt; // campo puntatore
};
Operazioni su lista dinamica a
puntatori
Inserimento in testa
1) q->next=l
q=new Record
2) l=q
q
l
Operazioni su lista dinamica a
puntatori
q=new Record q
1) q->next=succ
2) prec->next=q
prec succ
Operazioni su lista dinamica a
puntatori
Inserimento in coda
q=new Record q
0
temp->next=q
temp
Operazioni su lista dinamica a
puntatori
Eliminazione in testa
1) Record * temp=l
2) l=l->next
3) delete temp
l
Operazioni su lista dinamica a
puntatori
Eliminazione di un elemento interno alla lista
1) Record * temp=temp1->next
2) temp1->next=temp1->next->next
3) delete temp
temp1
Operazioni su lista dinamica a
puntatori
temp1
1) Record * temp=temp1->next
2) temp1->next=0
3) delete temp
Rappresentazione con lista dinamica a
puntatori
Lista ordinata
Le operazioni devono garantire lordinamento
La gestione molto vantaggiosa rispetto alla
soluzione precedente perch non richiede lo
spostamento fisico degli elementi in caso di
inserimento e eliminazione
Lista linkata: vantaggi