class Pila
{ /**Classe realizza meccanismi di unitarietà + hiding = incapsulamento */
/** Implementazione sequenziale di una pila mediante vettore */
private int[] V; //strutture dati nascoste private int testa; //meccanismo di hiding public Pila(int dim) // inizializza una pila vuota {
V = new int[dim];
testa = 0;
}
static public Pila push(Pila p, int n){ // inserisce un elemento if (pilapiena(p)) System.out.println("Pila piena");
else p.V[p.testa++] = n;
return(p);
}
static public Pila pop(Pila p){ // elimina un elemento if (!pilavuota(p)) p.testa = p.testa-1;
else System.out.println("pila vuota");
return(p);
}
static public int top(Pila p){ // legge ultimo valore inserito if (!pilavuota(p)) return(p.V[p.testa-1]);
else { System.out.println("pila vuota");
return(-1);
} }
static public boolean pilavuota(Pila p){ // pila p vuota?
return(p.testa==0);
}
static public boolean pilapiena(Pila p){ // pila p piena?
return(p.testa==(p.V).length);
}
static public int dimensione(Pila p){ // restituisce dimensione massima di p return((p.V).length);
} }
public class Provapila {
public static void main(){
Pila p = new Pila(20);
Pila p1 = new Pila(10);
Pila p2 = new Pila(1);
p2 = Pila.push(Pila.push(p2,4),1);
p = Pila.push(Pila.push(p,4), 5);
System.out.println(Pila.top(p));
p1 = Pila.push(Pila.push(p1,8), 7);
p = Pila.pop(p);
System.out.println(Pila.top(p));
p = Pila.pop(p);
if (Pila.pilavuota(p)) System.out.println("Pila vuota");
System.out.println(Pila.top(p));
System.out.println(Pila.top(p1));
} }