Una coda (queue) in Java è una struttura dati che segue il principio FIFO (First-In-First-Out), il che significa che il primo elemento inserito è il primo ad essere rimosso. È simile a una fila di persone in un supermercato: la prima persona che entra è la prima ad essere servita.
In Java, una coda può essere implementata utilizzando diverse strutture dati, tra cui una lista collegata o un’implementazione basata su array.
Operazioni principali:
In questo esempio implementiamo una la Coda 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;
}
}
Coda
: Questa classe rappresenta la struttura dati della coda e contiene i metodi per gestire gli elementi all’interno della coda.front
: È un riferimento al nodo all’inizio della coda.end
: È un riferimento al nodo alla fine della coda.dimensione
: Rappresenta il numero di nodi presenti nella coda.front
e end
a null
e la dimensione
a 0.isEmpty()
:
true
se la coda è vuota (cioè se front
è null
), altrimenti restituisce false
.enqueue(int info)
:
front
che end
al nuovo nodo.end
al nuovo nodo.dequeue()
:
IllegalStateException
).front
.end
a null
.peek()
:
IllegalStateException
).getDimensione()
:
// FIFO (First-In-First-Out)
public class Coda {
private Nodo front; // riferimento all'inizio della coda
private Nodo end; // riferimento alla fine della coda
private int dimensione; // numero di Nodi interni
public Coda() {
this.front = null;
this.end = null;
this.dimensione = 0;
}
// restituisce true se la coda è vuota, false altrimenti
public boolean isEmpty() {
return front == null;
}
// aggiunge un nuovo nodo in fondo alla coda
public void enqueue(int info) {
Nodo n = new Nodo(info);
if (isEmpty()) {
front = n;
} else {
end.setLink(n);
}
end = n;
dimensione++;
}
// rimuove il Nodo all'inizio della coda e ne ritorna il contenuto
public int dequeue() {
if (isEmpty()) {
throw new IllegalStateException("Errore: la coda e' vuota.");
}
int elemento = front.getInfo(); // Salva l'elemento all'inizio della coda
front = front.getLink(); // Rimuove il nodo all'inizio della coda
if (front == null) {
end = null; // Se la coda diventa vuota, anche il riferimento alla fine viene aggiornato
}
dimensione--;
return elemento;
}
// ritorna il contenuto del Nodo all'inizio
public int peek() {
if (isEmpty())
throw new IllegalStateException("Errore: la coda e' vuota.");
return front.getInfo();
}
public int getDimensione() {
return dimensione;
}
}
public class Main {
public static void main(String[] args) {
Coda coda = new Coda();
coda.enqueue(1);
coda.enqueue(2);
coda.enqueue(3);
System.out.println("Ottengo valore con peek: ");
System.out.println(coda.peek());
coda.enqueue(5);
// pop di elementi finche' la coda non e' vuota
System.out.println("Ottengo valore con pop: ");
while (!coda.isEmpty()) {
System.out.println(coda.dequeue());
}
}
}