Sostieni AppuntiFacili con una piccola donazione su PayPal
Dona con PayPal
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());
}
}
}
Prenota una lezione