11 - Comparación entre los tipos de listas

Cuándo usar cada lista

Las listas simplemente enlazadas, dobles y circulares resuelven problemas distintos. Esta sección compara su complejidad de inserción/eliminación, costos de memoria, velocidad de recorrido y criterios de selección.

11.1 Complejidad de inserción

Tipo Inicio Final (sin cola) Final (con cola)
Simple O(1) O(n) O(1) si se almacena cola
Doble O(1) O(1) O(1)
Circular O(1) O(1) O(1)

Las listas dobles y circulares con puntero a cola optimizan las inserciones finales, mientras que las simples requieren recorrer salvo que mantengan cola.

11.2 Complejidad de eliminación

Tipo Inicio Final Nodo intermedio (con referencia)
Simple O(1) O(n) O(1) si se tiene el nodo previo
Doble O(1) O(1) O(1) con referencia al nodo
Circular O(1) O(1) O(1) con referencia y cuidado de la circularidad

Las listas dobles permiten eliminar nodos con solo conocer su dirección porque disponen de punteros ant y sig.

11.3 Costos de memoria

El costo de memoria depende de los punteros adicionales:

  • Simple: 1 puntero por nodo.
  • Doble: 2 punteros por nodo.
  • Circular: 1 o 2 punteros, según la variante (simple/doble).

En sistemas con memoria limitada, una lista simple puede ser preferible si los recorridos son mayormente en un sentido.

11.4 Velocidad de recorrido

Las listas simples y dobles recorren en O(n). La diferencia es que las dobles permiten volver hacia atrás sin almacenar punteros adicionales. Las listas circulares evitan comprobaciones de NULL, pero requieren condiciones específicas para no entrar en bucles infinitos.

11.5 Cuándo elegir cada estructura

  • Lista simple: ideal para pilas, colas simples o estructuras con recorrido unidireccional donde se privilegia el bajo consumo de memoria.
  • Lista doble: apropiada para editores, navegadores o caches que necesitan moverse hacia adelante y atrás con facilidad.
  • Lista circular: útil en planificadores round-robin, buffers circularizados o algoritmos como Josephus donde no hay principio ni fin.

Selecciona la variante según el patrón de acceso, el costo de memoria aceptable y la facilidad para mantener los punteros consistentes.