Sostieni AppuntiFacili con una piccola donazione su PayPal
Dona con PayPal
Una pila, in Java, è una struttura dati lineare che segue il principio “LIFO” (Last In, First Out), il che significa che l’ultimo elemento inserito è il primo ad essere rimosso. È simile a un mucchio di piatti: il primo piatto che viene messo sul mucchio è l’ultimo a essere preso.
In Java, una pila può essere implementata utilizzando la classe Stack o utilizzando le collezioni della libreria standard come LinkedList o ArrayDeque e implementando le operazioni di inserimento (push) e rimozione (pop) degli elementi.
Operazioni principali:
In questo esempio implementiamo una la Pila utilizzando una lista.
La classe Nodo rappresenta un elemento fondamentale della lista. Ogni nodo contiene due parti principali:
info): Questo è il contenuto effettivo del nodo. È il valore che il nodo memorizza o rappresenta.link): Questo è un riferimento al prossimo nodo nella lista. Ogni nodo, tranne l’ultimo, punta al nodo successivo. L’ultimo nodo della lista ha il suo link impostato su null, indicando la fine della lista.Inoltre, la classe Nodo fornisce metodi per accedere e modificare questi attributi:
getInfo(): Restituisce il valore memorizzato nel nodo.getLink(): Restituisce il riferimento al nodo successivo.setLink(Nodo link): Imposta il riferimento al nodo successivo.public class Nodo {
private int info;
private Nodo link;
public Nodo(int info) {
this.info = info;
this.link = null;
}
public int getInfo() {
return info;
}
public Nodo getLink() {
return link;
}
public void setInfo(int info) {
this.info = info;
}
public void setLink(Nodo link) {
this.link = link;
}
}
Pila: Questa classe rappresenta la struttura dati della pila e contiene i metodi per gestire gli elementi all’interno della pila.cima: È un riferimento al nodo in cima alla pila. Se la pila è vuota, cima è null.dimensione: Rappresenta il numero di nodi presenti nella pila.cima a null e la dimensione a 0.isEmpty():
true se la pila è vuota (cioè se cima è null), altrimenti restituisce false.push(int info):
pop():
IllegalStateException).peek():
IllegalStateException).size():
// LIFO (Last-In-First-Out)
public class Pila {
private Nodo cima; // riferimento al nodo in cima alla pila
private int dimensione; // numero di Nodi interni
public Pila() {
this.cima = null;
this.dimensione = 0;
}
// restituisce true se la pila è vuota, false altrimenti
public boolean isEmpty() {
return cima == null;
}
// aggiunge un nuovo nodo
public void push(int info) {
Nodo n = new Nodo(info);
n.setLink(cima); // collegamento del nuovo nodo al nodo precedente in cima alla pila
cima = n; // il nuovo nodo diventa il nodo in cima alla pila
dimensione++;
}
// rimuove il Nodo in cima e ne ritorna il contenuto
public int pop() {
if (isEmpty())
throw new IllegalStateException("Errore: la pila e' vuota.");
int elemento = cima.getInfo(); // estrazione del contenuto del Nodo in cima
cima = cima.getLink(); // rimozione del Nodo in cima
dimensione--;
return elemento;
}
// ritorna il contenuto del Nodo in cima
public int peek() {
if (isEmpty())
throw new IllegalStateException("Errore: la pila e' vuota.");
return cima.getInfo();
}
public int size() {
return dimensione;
}
}
public class Main {
public static void main(String[] args) {
Pila pila = new Pila();
pila.push(1);
pila.push(2);
pila.push(3);
System.out.println("Ottengo valore con peek: ");
System.out.println(pila.peek());
pila.push(5);
// pop di elementi finche' la pila non e' vuota
System.out.println("Ottengo valore con pop: ");
while (!pila.isEmpty()) {
System.out.println(pila.pop());
}
}
}
Prenota una lezione