Introducción¶
Son estructuras de datos bajo enfoque FIFO, primero en entrar primero en salir
Operaciones¶
- enqueue Insertar un elemento al final de la cola
- dequeue Eliminar el primer elemento de la cola
- peek ver el primer elemento de la cola
Implementación¶
public class Cola {
private int frente;
private int finalCola;
private int arreglo[];
private int tam;
private int capacidad;
Cola(int capacidad) {
this.frente = 0;
this.finalCola = -1;
this.arreglo = new int[capacidad];
this.tam = 0;
this.capacidad = capacidad;
}
public boolean estaVacia() {
return this.tam == 0;
}
public boolean estaLlena() {
return this.tam;
}
public void enqueue(int elm) {
if (estaLlena()) {
// Lanzar un excepcion de overflow
}
this.finalCola = (this.finalCola + 1) % this.capacidad;
this.arreglo[this.finalCola] = elm;
this.tam++;
}
public int dequeue(int elm) {
if (estaVacia()) {
// Lanzar un excepcion de underflow
}
int elem = this.arreglo[this.frente];
this.frente = (this.frente + 1) % this.capacidad;
this.tam--;
return elem;
}
public int peek() {
if (estaVacia()) {
// Lanzar un excepcion de underflow
}
int elem = this.arreglo[this.frente];
return elem;
}
}
Ejemplos¶


Complejidad computacional¶
Todas las operaciones dependen de los indices frente y finalCola, esto implica que no nos interesa el tamaño de la cola, por lo tanto la complejidad es \(O(1)\)
Ventajas y desventajas¶
Ventajas¶
- Implementación sencilla
- Operaciones en tiempo constante
- Gestión eficiente de recursos ideal para tareas que requieren un orden de llegada, por ejemplo colas de impresión.
- Uso de algoritmos en grafos como BFS
Desventajas¶
- Acceso es limitado (solo un elemento a la vez)
- Problemas de overflow y underflow dada la capacidad limitada
- Uso ineficiente de memoria en el caso de que se tenga un arreglo grande y pocos elementos