public class PilaArray implements Pila { private static int dimensioneIniziale = 20; //la dimensione iniziale della lista private Object[] lista; private int nOggetti; public PilaArray() { lista = new Object[dimensioneIniziale]; nOggetti = 0; } public PilaArray(int n) throws IllegalArgumentException { if (n>0) { lista = new Object[n]; nOggetti = 0; } else throw new IllegalArgumentException(); } public boolean eVuota() { return nOggetti == 0; } public int lunghezza() { //la variabile d'ausilio fa risparmiare un bel tempo return nOggetti; } public Object pop() throws IllegalArgumentException{ Object elem = elemento(0); cancella(0); return elem; } public Object top() throws IllegalArgumentException{ return elemento(0); } private void cancella(int k) throws IllegalArgumentException { // 0<=k=nOggetti) throw new IllegalArgumentException(); else { nOggetti--;//se sono all'ultimo elemento, ho giˆ fatto if (k != nOggetti) {//non sono nell'ultimo elemento for ( ; k < nOggetti; k++) lista[k]=lista[k+1]; } } } private Object elemento(int k) throws IllegalArgumentException { // 0<=k=nOggetti) throw new IllegalArgumentException(); else return lista[k]; } public void push(Object u) throws IllegalArgumentException { inserisci(0,u); } private void inserisci(int k, Object u) throws IllegalArgumentException { // 0<=knOggetti) throw new IllegalArgumentException(); else { if (nOggetti+1 <= lista.length) { //c'e' ancora spazio for (int i=nOggetti ; i > k; i--) lista[i]=lista[i-1]; lista[k]=u; nOggetti++; } else {//e' necessario aumentare la dimensione dell'array Object[] listaNuova = new Object[lista.length + dimensioneIniziale]; for(int i=0; i < k; i++)//copio tutti gli elementi prima di k listaNuova[i]=lista[i]; listaNuova[k]=u; //inserisco il nuovo elemento in posizione k for(int i=k; i < nOggetti; i++)//copio tutti gli altri elementi dopo k listaNuova[i+1]=lista[i]; nOggetti++; lista=listaNuova; } } } }