pile

last in first out

La pila non è poi molto diversa dalla lista, in realtà è molto semplicemente implementabile come una lista in cui si inserisce e si estrae dalla stessa parte. Sebbene teoricamente sia possibile lavorare sia in coda che in testa l'implementazione più semplice (quella riportata qui) inserisce/estrae dalla testa della pila.

ElementoPila

public class ElementoPila {
    public String dato;
    public ElementoPila precedente;
}

Pila

package lezioni.strutturedati;

/****************************************************************************
 * Una pila con le operazioni fondamentali
 ***************************************************************************/
public class Pila {
    private ElementoPila testa;
    
    public Pila(){
        testa = null;
    }
    
    /************************************************************************
     * @param nuovoDato l'elemento da inserire sulla pila
     ***********************************************************************/
    public void push(String nuovoDato){
        ElementoPila nuovoElemento;
        
        // creo il nuovo elemento della pila
        nuovoElemento = new ElementoPila();
        nuovoElemento.dato = nuovoDato;
        nuovoElemento.precedente = null;
        // controllo se in lista c'è già qualcosa
        if(testa == null){
            // in lista non c'è nulla quindi la lista è costituita 
            // solamente dal nuovo elemento
            testa = nuovoElemento;
        }else{
            // esistono già elementi
            nuovoElemento.precedente = testa;
            testa = nuovoElemento;
        }
    }
    
    /************************************************************************
     * @return il primo elemento della pila (e lo toglie dalla pila)
     ***********************************************************************/
    public String pop(){
        ElementoPila temp;
        
        // il primo elemento della lista
        temp = testa;   
        // scorri avanti
        testa = testa.precedente;
        return temp.dato;
    }
    
    /************************************************************************
     * @return true se la lista è vuota
     ***********************************************************************/
    public boolean vuota(){
        return testa == null;
    }
}

Quanto varrà la variabile n alla fine del seguente frammento di programma?

Pila p = new Pila();
p.push("ciao");
p.push("mondo");
String n = p.pop();
è errato no, il programma è corretto null no, la pila contiene dei valori ciao no, in una pila il primo elemento ad uscire è l'ultimo inserito mondo si! in una pila il primo elemento ad uscire è l'ultimo inserito