Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Lezione 6
Lista ordinata, Stack, Coda
Oggi parleremo di …
Struttura Stack
Dati: una lista ordinata di zero o più elementi
Operazioni:
CreaS(max_stack_size) Stack
crea uno stack vuoto la cui dimensione massima è max_stack_size
Pieno(stack, max_stack_size) Booleano
if (numero di elementi in stack è uguale a max_stack_size) return TRUE,
else return FALSE
Vuoto(stack) Booleano
if (stack=CreaS(max_stack_size)) return TRUE else return FALSE
Add(stack, item) Stack
if (Pieno(stack, max_stack_size)) stack_full, else inserisci item in cima allo stack
e return
Delete(stack) Elemento
if (Vuoto(stack)) stack_empty, else elimina l’elemento in cima allo stack e
restituiscilo
Inserimento e cancellazione: esempi
c top d top
b top b b top b b top
a top a a a a a
Mediante Arrays
permettono di implementare stack in modo semplice
flessibilità limitata, ma incontra parecchi casi di utilizzo
la capacità dello Stack è limitata.
Mediante Liste concatenate.
if (top = MAX_SIZE-1) then return error “overflow” if (top = -1) then return error “underflow”
else top top+1 else top top-1
stack[top] item return stack[top+1]
La struttura dati Coda
Una coda implementa una lista di tipo “First In, First Out” (FIFO)
può essere cancellato l’elemento che per più tempo è rimasto nell’insieme
una coda possiede una testa (davanti) e una coda (dietro)
quando si aggiunge un elemento, viene inserito in fondo alla coda
quando si rimuove un elemento, viene estratto quello in testa
La struttura dati Coda: applicazioni
Struttura Coda
Dati: una lista ordinata di zero o più elementi
Operazioni:
CreaC(max_coda_size) Coda
crea una coda vuota la cui dimensione massima è max_coda_size
CPiena(coda, max_coda_size) Booleano
if (numero di elementi in coda è uguale a max_coda_size) return TRUE,
else return FALSE
CVuota(coda) Booleano
if (coda=CreaC(max_coda_size)) return TRUE else return FALSE
AddC(coda, item) Coda
if (CPiena(coda, max_coda_size)) coda_full, else inserisci item in fondo alla
coda e return coda
DeleteC(coda) Elemento
if (CVuota(coda)) coda_empty, else elimina l’elemento in testa alla coda e
restituiscilo
Inserimento e cancellazione: esempi
d dietro d dietro
c dietro c dietro c c
b dietro b b b davanti
dietro
davanti
Implementazione delle funzioni
algoritmo AddC(intero dietro, elemento item) algoritmo DeleteC(intero davanti, dietro) elemento
if (dietro=MAX_SIZE-1) then return error “overflow” if (davanti=dietro) then return error “underflow”
else dietro dietro+1 else davanti davanti+1
coda[dietro] item return coda[davanti]
La Coda circolare
2 3 2 3 2 3
b b c
1 4 1 a 4 1 d 4
e
0 5 0 5 0 5
davanti = 0 Coda davanti = 0 davanti = 1
dietro = 0 vuota dietro = 2 dietro = 5
2 3 2 3 2 3
b c c
1 d 4 1 d 4 1 g d 4
f e f e f e
0 5 0 5 0 5
davanti = 1 Coda davanti = 2 davanti = 3
dietro = 0 piena dietro = 0 dietro = 1
Coda circolare : implementazione
19