Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Stack
Indice
• Stack
• Operazioni sullo Stack
1
Stack
• Stack
Anche chiamata Lista LIFO, PushDown List
• Modello matematico
È lista L dove inserimento ed estrazione degli elementi
avviene esclusivamente da un solo lato, top.
Esempio: pila di libri, piatti etc..
Pila - Operazioni
• Inserisci elemento nella pila S
Push(S, Elemento)
• Estrai elemento dalla pila S
Pop(S)
• Restituisci testa della pila S
Top(S)
• Controlla se Stack vuoto
StackIsEmpty(S)
• Controlla se Stack pieno
StackIsFull(S)
2
Esempio
push(7)
push(1) 7 pop
push(4) 1 7 7 pop
push(2) 4 1 1 1 1 pop
2 4 4 4 4 4 4
2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3
Esempio
Notazione Infissaà Postfissa
3
Cont.
• Nella notazione postfissa:
5 3 + à8
1. Si valuta da sinistra a destra stringa input ( operandi e
operatori)
2. Si accumulano sullo stack simboli fino a che non si
incontra operatore che si applica ai due operandi in cima
allo stack.
3. Risultato si scrive in cima allo stack
4. Si procede fino a ultimo simbolo input
Il risultato è il valore dell’unico elemento rimasto nello stack
Cont.
• Nella notazione postfissa:
5 3 + à8
Pop
Pop 3+5
Push(3)
Push(5) Push(8)
3
5 5 8
4
Conversione da Infissa a Postfissa
• Infissa: (5 * (((9 + 8) * (4 * 6)) +7))
• Postfissa: 5 9 8 + 4 6 * * 7 + *
5
Conversione infissa ⇒ postfissa
( 9 + ( 8 * 4 ) )
output Stack
( 9 + ( 8 * 4 ) )
( 9 + ( 8 * 4 ) ) 9
( 9 + ( 8 * 4 ) ) 9 +
( 9 + ( 8 * 4 ) ) 9 +
( 9 + ( 8 * 4 ) ) 98 +
( 9 + ( 8 * 4 ) ) 98 * +
( 9 + ( 8 * 4 ) ) 984 *+
( 9 + ( 8 * 4 ) ) 984* +
( 9 + ( 8 * 4 ) ) 984*+
6
Esercizio
• Modificare la funzione precedente in modo che gestisca
numeri di 2, 3,..n cifre.
Esercizio
• Scrivere una funzione che prende in input una
espressione postfissa e la valuti.
Output Stack
9 8 4 * + 9
9 8 4 * + 8 9
9 8 4 * + 4 8 9
9 8 4 * + 32 9
9 8 4 * + 41
9 8 4 * + 41
7
Implementazione dello Stack
Numero elementi
presenti nello stack
struct TipoStack {
int N; Numero massimo di
elementi memorizzabili
int dim; nello stack
int *s;
}; Array per memorizzare gli
elementi.
8
Tipo di Dato Astratto Stack
struct TipoStack
{
Implementazione Stack: Array int N;
bool StackIsEmpty(StackPtr p) {
int dim;
return (p->N == 0); int *s;
} };
bool StackIsFull(StackPtr p) {
return (p->N == p->dim);
}
9
Caratteristiche delle operazioni Push e Pop
10