- Costruire la propria classe Stack
- Classe Stack
- Utilizzo della classe ArrayDeque
- Casi di utilizzo delle pile
- Link Utili
Una pila è un tipo di dato strutturato che segue la strategia LIFO (Last In, First Out), il che significa che l’ultimo elemento inserito nella pila sarà il primo a essere rimosso. È una struttura di dati lineare che utilizza due operazioni principali: push
e pop
. La funzione push
viene utilizzata per inserire un nuovo elemento in cima alla pila, mentre la funzione pop
viene utilizzata per rimuovere l’elemento in cima alla pila.
Una pila è utile in molte situazioni, come ad esempio per la risoluzione di espressioni matematiche o per l’implementazione di algoritmi ricorsivi. In questi casi, gli elementi vengono inseriti nella pila al momento della chiamata ricorsiva e vengono rimossi dalla pila quando si ritorna dalla chiamata ricorsiva.
In sintesi, una pila è una struttura di dati lineare che segue la strategia LIFO e utilizza le operazioni push
e pop
per gestire l’inserimento e la rimozione di elementi.
Costruire la propria classe Stack
Ecco un esempio di come creare una pila da zero in Java:
public class Stack {
int[] elements;
int size;
public Stack(int capacity) {
elements = new int[capacity];
size = 0;
}
public void push(int element) {
if (size == elements.length) {
throw new IllegalStateException("La pila è piena!");
}
elements[size++] = element;
}
public int pop() {
if (size == 0) {
throw new IllegalStateException("La pila è vuota!");
}
return elements[--size];
}
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
}
Classe Stack
Ecco un esempio di implementazione utilizzando java.util.Stack:
import java.util.Stack;
public class StackExample {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
// Aggiungi elementi alla pila
stack.push(1);
stack.push(2);
stack.push(3);
// Stampa il contenuto della pila
System.out.println("Elementi nella pila: " + stack);
// Rimuovi l'elemento in cima alla pila
int removedElement = stack.pop();
System.out.println("Elemento rimosso: " + removedElement);
// Verifica se la pila è vuota
System.out.println("La pila è vuota: " + stack.isEmpty());
}
}
Utilizzo della classe ArrayDeque
Ecco un esempio di implementazione utilizzando java.util.ArrayDeque:
import java.util.ArrayDeque;
public class StackExample2 {
public static void main(String[] args) {
ArrayDeque<Integer> stack = new ArrayDeque<>();
// Aggiungi elementi alla pila
stack.push(1);
stack.push(2);
stack.push(3);
// Stampa il contenuto della pila
System.out.println("Elementi nella pila: " + stack);
// Rimuovi l'elemento in cima alla pila
int removedElement = stack.pop();
System.out.println("Elemento rimosso: " + removedElement);
// Verifica se la pila è vuota
System.out.println("La pila è vuota: " + stack.isEmpty());
}
}
Casi di utilizzo delle pile
Le pile sono utilizzate in molte situazioni diverse e alcuni degli usi più comuni sono:
- Risoluzione di espressioni matematiche: le pile sono spesso utilizzate per risolvere espressioni matematiche in notazione polacca inversa.
- Algoritmi ricorsivi: le pile sono utilizzate per implementare algoritmi ricorsivi che richiedono di tenere traccia delle chiamate ricorsive correnti.
- Navigazione del browser web: le pile sono utilizzate per tenere traccia della navigazione del browser web, in modo che l’utente possa tornare alla pagina precedente premendo il pulsante “Indietro”.
- Undo/Redo: le pile sono utilizzate per implementare la funzionalità Undo/Redo in molti software, dove gli utenti possono annullare o ripetere le azioni precedenti.
- Controllo di sistemi operativi: le pile sono utilizzate nei sistemi operativi per gestire le chiamate del sistema e il controllo dei processi.
In sintesi, le pile sono un tipo di dato strutturato molto utile che viene utilizzato in molti diversi contesti, sia in ambito accademico che in ambito industriale.