Strutture dinamiche
3^ INFORMATICO - IIS PASCAL�DIPARTIMENTO INFORMATICA
Strutture dinamiche particolari
2
Strutture dinamiche particolari
Con struct e puntatori è possibile realizzare molte strutture dati.�Noi vedremo:
E’ possibile anche costruire:
�
Strutture dinamiche particolari - PILA
La prima struttura che vediamo è la struttura a pila (o stack)
caratteristiche:
Strutture dinamiche particolari - PILA
Realizzazione in C++ di una struttura che implementi il concetto di PILA
E’ comunque una struttura dinamica collegata con un elemento iniziale (come una lista)
Le operazioni previste sono già state viste nella lista
nullptr
head
10
8
7
15
Strutture dinamiche particolari - PILA
Operazioni
nullptr
head
10
8
7
15
15
tmp
1)
/
2)
3)
Strutture dinamiche particolari - PILA
Operazioni
nullptr
head
10
8
7
15
tmp
1)
/
2)
3)
Strutture dinamiche particolari - PILA
Operazioni
nullptr
head
10
8
7
15
2)
head
nullptr
caso lista vuota - nulla da visualizzare
caso lista non vuota - visualizzo l’info del primo nodo
ESERCIZI
9
Strutture dinamiche particolari - CODA
La seconda struttura che vediamo è la struttura a coda (o queue)
caratteristiche:
testa
Strutture dinamiche particolari - CODA
Realizzazione in C++ di una struttura che implementi il concetto di CODA
E’ comunque una struttura dinamica collegata con un elemento iniziale (come una lista)
Le operazioni previste sono già state viste nella lista
nullptr
testa
10
8
7
15
Strutture dinamiche particolari - CODA
Realizzazione in C++ di una struttura che implementi il concetto di CODA
E’ comunque una struttura dinamica collegata con un elemento iniziale (come una lista)
Le operazioni previste sono già state viste nella lista
NOTA : � la enqueue è realizzabile con la procedura di inserimento in fondo in una lista
la dequeue è realizzabile con la procedura di estrazione dalla testa di una lista
nullptr
testa
10
8
7
15
15
/
Strutture dinamiche particolari - CODA
Realizzazione in C++ di una struttura che implementi il concetto di CODA
E’ comunque una struttura dinamica collegata con un elemento iniziale (come una lista)
Le operazioni previste sono già state viste nella lista
nullptr
testa
10
8
7
15
tmp
/
Strutture dinamiche particolari - CODA
Realizzazione in C++ di una struttura che implementi il concetto di CODA
E’ comunque una struttura dinamica collegata con un elemento iniziale (come una lista)
Le operazioni previste sono già state viste nella lista
nullptr
head
10
8
7
15
2)
head
nullptr
caso coda vuota - nulla da visualizzare
caso lista non vuota - visualizzo l’info del primo nodo
Strutture dinamiche particolari - Liste Bidirezionali
Solo un accenno alla struttura delle liste bidirezionali
Cambia la struttura del nodo: contiene anche un puntatore�al nodo precedente
Usiamo un puntatore a head (primo elemento)�e uno a tail (ultimo elemento)
�Più complessa ma ho accesso diretto all’ultimo elemento (e quindi inserimento sempre in O(1)) e possibilità di visualizzare la lista anche in senso inverso�Si lascia la realizzazione allo studente per esercizio
head
10
O
tail
30
O
20
PILE e CODE
Implementazione�
16
Implementazione PILA
17
Utilizzeremo la suddivisione fra files .h (intestazioni) e files .cpp (corpo dei metodi) - �NON È’ OBBLIGATORIA MA È LO STANDARD DI PROGRAMMAZIONE
Dividiamo il progetto in 3 files:
PERCHÈ’ ?�perché se viene modificata la libreria relativa alla struttura della pila, non viene modificato il programma principale ma va soltanto ricompilato!
Implementazione PILA
18
file pila.h contiene
Cosa sono le scritte in verde??
quando si usano i file .h è norma�usare le include guards che�hanno il compito di evitare�importazioni multiple dello stesso�file
Implementazione PILA
19
file pila.cpp contiene:
Implementazione PILA
20
file main.cpp contiene:
OUTPUT
NOTA: Per come abbiamo implementato top, riceviamo -INT_MAX come valore per una pila vuota
Implementazione PILA
21
file main.cpp contiene:
COMPILEr OUTPUT
ESERCIZIO
22
Prova ad implementare una struttura a coda con una metodologia simile a quella appena illustrata
Crea un file coda.h ed il suo corrispondente coda.cpp
Definisci e implementa le seguenti funzioni:
Al termine inserisci nel main le istruzioni per utilizzare la coda