Estructuras de Datos y Algoritmos · Programación

Arreglos y listas enlazadas

Compara el acceso, la inserción y el borrado en arreglos frente a listas enlazadas y elige la estructura adecuada al patrón de uso.

Arreglos y listas enlazadas

Diagrama de estructuras de datos: arbol binario, lista enlazada y tabla hash.
Estructuras de datos fundamentales y analisis de complejidad algoritmica.

Mapa conceptual

Contiguo frente a enlazado Ambos guardan secuencias de elementos. La diferencia lo es todo: el arreglo los pone pegados en memoria (puedo calcular dónde está el elemento 5000 de golpe), la lista enlazada los dispersa y los une con punteros (puedo insertar entre dos elementos sin mover nada).

Arreglo (array)

Bloque de memoria contigua de mismo tipo. Como los elementos están uno tras otro, el acceso por índice es O(1): el computador calcula la dirección base + índice·tamaño. El precio: insertar o borrar en el medio obliga a DESPLAZAR todos los siguientes (O(n)), y el tamaño fijo puede obligar a copiar todo al crecer.

Lista enlazada

Secuencia de nodos, cada uno con su dato y un puntero al siguiente. Insertar al inicio o junto a un nodo conocido es O(1): solo cambias punteros, no mueves datos. El precio: para llegar al elemento k hay que RECORRER desde la cabecera (O(n)); no hay acceso aleatorio.

Nota la trampa de la inserción enlazada: es O(1) solo SI ya tienes el puntero al nodo; localizar ese nodo sigue costando O(n).
OperaciónArregloLista enlazada
Acceso por índiceO(1)O(n) (recorrer)
Insertar al inicioO(n) (desplazar)O(1) (nuevo nodo)
Insertar en el medioO(n)O(1) una vez localizado el sitio
Buscar un valorO(n)O(n)
Memoria por elementocompacta, contiguaextra por el puntero
Crecimientoa veces copiar (amortizado O(1))siempre O(1) añadir al final

¿Cuándo cada uno?

Lo que Big-O no cuenta La localidad de referencia lo cambia todo en máquinas reales: recorrer un arreglo es veloz no solo por ser O(n) sino porque la caché carga bloques contiguos. Un recorrido enlazado salta por memoria dispersa y desperdicia caché: mismo O(n), muy distinto tiempo de muro.

¿Cuál es la complejidad de INSERTAR un elemento al principio de una lista enlazada simplemente enlazada frente a un arreglo?

El acceso aleatorio a la posición i de un arreglo es O(1) porque sus elementos son de tamaño fijo y están en memoria contigua.

Clasifica cada operación según dónde rinde mejor (complejidad más baja).

Arreglo
Lista enlazada
Igual en ambos

Errores frecuentes

Ejemplo resuelto

  1. Necesitas una cola de tareas donde siempre añades al final y tomas del principio.
  2. Con un arreglo, tomar del principio desplaza todos los elementos: O(n).
  3. Con una lista enlazada (o un arreglo circular), tomar del principio es mover la cabecera: O(1).
  4. Conclusión: para ese patrón FIFO, la estructura enlazada o un deque es mejor que un arreglo plano.
  5. Nota: si además necesitaras «mirar la tarea i-ésima», volverías a preferir el arreglo.

Todo un DataFrame es, por dentro, un arreglo (o varios). Por eso filtrar por posición o recorrer columnas es veloz, e insertar filas en el medio es caro. Entender arreglo-vs-enlazada explica por qué «añadir una fila a un CSV reescribiéndolo» no escala y una base de datos usa índices aparte.

Contiguo o enlazado

arreglo
memoria contigua, acceso O(1)
lista enlazada
nodos + puntero, inserción O(1)
acceso aleatorio
ventaja del arreglo
desplazar
costo de insertar/borrar en arreglo
localidad de caché
ventaja real del arreglo
puntero extra
costo de memoria de la enlazada

Estructuras lineales (repaso formal)
Arreglos y listas enlazadas con sus operaciones y costos.

Estás implementando un historial «deshacer» donde lo frecuente es añadir la última acción y deshacer la más reciente, pero a veces consultar la acción número k. Argumenta si prefieres arreglo o lista enlazada y qué operación de tu lista de deseos sale cara.

VisuAlgo
Visualizaciones animadas de estructuras de datos y algoritmos.