public class Queue { private Node front; // Puntero al frente de la cola private Node rear; // Puntero al final de la cola private int size; // Tamaño de la cola // Clase interna para el nodo private static class Node { T data; Node next; Node(T data) { this.data = data; this.next = null; } } // Constructor para la cola public Queue() { front = rear = null; size = 0; } // Método para agregar un elemento a la cola public void enqueue(T data) { Node newNode = new Node<>(data); if (isEmpty()) { front = rear = newNode; } else { rear.next = newNode; rear = newNode; } size++; } // Método para eliminar un elemento de la cola public T dequeue() { if (isEmpty()) { throw new IllegalStateException("La cola está vacía"); } T data = front.data; if (front == rear) { front = rear = null; } else { front = front.next; } size--; return data; } // Método para verificar si la cola está vacía public boolean isEmpty() { return front == null; } // Método para obtener el tamaño de la cola public int size() { return size; } // Método para imprimir los elementos de la cola public void printQueue() { Node current = front; while (current != null) { System.out.print(current.data + " "); current = current.next; } System.out.println(); } // Método main para probar la implementación de la cola public static void main(String[] args) { Queue queue = new Queue<>(); queue.enqueue(1); queue.enqueue(2); queue.enqueue(3); System.out.println("Tamaño de la cola: " + queue.size()); queue.printQueue(); System.out.println("Desencolando: " + queue.dequeue()); System.out.println("Desencolando: " + queue.dequeue()); System.out.println("Tamaño de la cola después de desencolar dos elementos: " + queue.size()); queue.printQueue(); } }