Java Generic Linked Queue Implementation (FIFO)
Classified in Spanish
Written on in
English with a size of 8.2 KB
Java LinkedQueue Implementation (Generic)
This document presents the source code for a generic LinkedQueue class in Java. This implementation uses a singly linked list structure, adheres to the FIFO (First-In, First-Out) principle, and implements the Iterable interface.
package org.mp.repaso;
import java.util.Iterator;
import java.util.NoSuchElementException;
public class LinkedQueue<T> implements Iterable<T> {
<span style="color:#ba2da2">private int</span> N; <span style="color:rgb(0,132,0)">// Tamaño de la cola</span>
<span style="color:rgb(186,45,162)">private</span> Node<T> primero; <span style="color:rgb(0,132,0)">// Primer elemento de la cola (Head)</span>
<span style="color:rgb(186,45,162)">private</span> Node<T> ultimo; <span style="color:rgb(0,132,0)">// Último elemento de la cola (Tail)</span>
Node Inner Class
private class Node<T> {
private T element;
private Node<T> next;
<span style="color:rgb(186,45,162)">public</span> Node(T e) {
element = e;
next = <span style="color:rgb(186,45,162)">null</span>;
}
<span style="color:rgb(186,45,162)">public</span> Node(T e, Node<T> n) {
element = e;
next = n;
}
}
Constructors
public LinkedQueue() {
primero = ultimo = null;
N = 0;
}
<span style="color:#ba2da2">public</span> LinkedQueue(T[] objects) {
<span style="color:#ba2da2">for</span> (<span style="color:#ba2da2">int</span> i = <span style="color:#272ad8">0</span>; i < objects.length; i++) {
enqueue(objects[i]);
}
}
Queue Utility Methods
public boolean isEmpty() {
return N == 0;
}
<span style="color:rgb(186,45,162)">public void</span> clear() {
primero = ultimo = <span style="color:rgb(186,45,162)">null</span>;
N = <span style="color:rgb(39,42,216)">0</span>;
}
<span style="color:rgb(186,45,162)">public int</span> size() {
<span style="color:rgb(186,45,162)">return</span> N;
}
Enqueue Operation (Adding an Element)
public void enqueue(T e) {
Node<T> nuevo = new Node<T>(e);
if (ultimo == null) {
primero = ultimo = nuevo;
} else {
ultimo.next = nuevo;
ultimo = nuevo;
}
N++;
}
Dequeue Operation (Removing the First Element)
public T dequeue() {
if (isEmpty()) throw new NoSuchElementException ("La cola está vacía");
T aux = primero.element;
primero = primero.next;
N--;
<span style="color:#ba2da2">return</span> aux;
}
Accessing the First Element (getFirst)
/**
* Devuelve el primer elemento de la cola.
* @return el primer elemento de la cola
* @throws NoSuchElementException si la cola está vacía
*/
public T getFirst() {
if (isEmpty()) throw new NoSuchElementException("La cola está vacía");
return primero.element;
}
String Representation (toString)
/**
* Devuelve una representación de la cola.
* @return la secuencia de elementos contenidos en la cola en orden FIFO
*/
public String toString() {
Node<T> temp = primero; // Creamos el nodo temporal para recorrer
String s = "[";
while (temp != null) {
s += temp.element;
temp = temp.next;
if (temp != null) {
s += ", ";
}
}
return s + "]";
}
Iterator Implementation
/**
* Devuelve un iterador para esta cola que permite iterar sobre los elementos en orden FIFO.
* @return un iterador para esta cola que permite iterar sobre los elementos en orden FIFO
*/
public Iterator<T> iterator() {
return new LinkedQueueIterator();
}
LinkedQueueIterator Inner Class
/**
* Clase privada LinkedQueueIterator
*/
private class LinkedQueueIterator implements Iterator<T> {
/**
Nodo temporal
*/
private Node<T> temp;/**
Constructor por defecto, que establece temp como
el primer nodo (frente de la cola)
*/
public LinkedQueueIterator() {
temp = primero;
}/**
Comprueba si tiene siguiente.
@return true si tiene siguiente, false en caso contrario
*/
public boolean hasNext() {
return temp != null;
}/**
Devuelve el elemento siguiente.
@return el elemento siguiente
@throws NoSuchElementException si no hay elementos en la cola
*/
public T next() {
if (temp == null) throw new NoSuchElementException("La cola está vacía");
T aux = temp.element;
temp = temp.next;
return aux;
}/**
Remove. (Operación No Soportada)
@throws UnsupportedOperationException
*/
public void remove() {
throw new UnsupportedOperationException();
}
}
}