Pila e Coda
1️⃣ Pila (Stack)


Una pila è una struttura dati lineare che segue il principio "LIFO" (Last In, First Out), che significa "l'ultimo elemento inserito è il primo elemento ad essere rimosso". In altre parole, l'accesso e l'aggiunta degli elementi avvengono solo dalla cima della pila.
Una pila è facilmente implementabile usando o una lista o un array.

Operazioni principali
- Push: Aggiunge un nuovo elemento alla cima della pila.
- Pop: Rimuove l'elemento dalla cima della pila.
- Peek (o Top): Restituisce (senza rimuovere) l'elemento che si trova sulla cima della pila.
- isEmpty: Verifica se la pila è vuota.
- Size: Restituisce il numero di elementi presenti nella pila.
Utilizzi tipici
- Gestione della chiamata a funzioni (stack delle chiamate).
- Implementazione di algoritmi come la valutazione di espressioni postfix o la navigazione backtracking.
Implementazione


2️⃣ Coda (Queue)
Una coda è una struttura dati lineare che segue il principio "FIFO" (First In, First Out), che significa "il primo elemento inserito è il primo elemento ad essere rimosso". In altre parole, l'accesso agli elementi avviene dalla parte anteriore della coda (detta "front") e l'aggiunta degli elementi avviene nella parte posteriore della coda (detta "rear").
Una coda è facilmente implementabile usando o una lista o un array.

Operazioni principali
- Enqueue: Aggiunge un nuovo elemento alla fine della coda (rear).
- Dequeue: Rimuove l'elemento dall'inizio della coda (front).
- Front: Restituisce (senza rimuovere) l'elemento che si trova all'inizio della coda.
- isEmpty: Verifica se la coda è vuota.
- Size: Restituisce il numero di elementi presenti nella coda.
Utilizzi tipici
- Gestione delle richieste in un sistema di elaborazione dei processi o nella gestione dei job.
- Implementazione di algoritmi come BFS (Breadth-First Search) per la visita di grafi.
Implementazione



