Volver a la lista

Arreglos frente a listas enlazadas.

Se explica la diferencia en la estructura de memoria entre los arreglos y las listas enlazadas, se comparan los rendimientos de inserción, eliminación y búsqueda, y se describen los criterios de selección según el contexto.

Principiante
|
7min
|
Verificado (2026-07)
Progreso0/23 (0%)

Arreglos vs. listas enlazadas

Al finalizar este tema

Podrás explicar las diferencias en la estructura de memoria entre los arreglos y las listas enlazadas, y podrás decidir cuál elegir según el contexto.


Arreglos: memoria contigua

Los arreglos (Arrays) almacenan los datos de forma contigua en la memoria.

text
Dirección de memoria:  100  104  108  112  116
            +----+----+----+----+----+
Valor:         | 10 | 20 | 30 | 40 | 50 |
            +----+----+----+----+----+
Índice:       0    1    2    3    4

La ventaja es que permite el acceso inmediato a través del índice.

python
arr = [10, 20, 30, 40, 50]
print(arr[3]) # 40 — Acceso inmediato (O(1))

Cuando decimos "tercera posición", calculamos la dirección de inicio más (3 × tamaño), lo que nos lleva directamente a esa ubicación. Se accede en un solo paso, independientemente del número de elementos.

Desventajas de los arreglos: inserción y eliminación

text
¿Cómo insertar 15 en el índice 1 de [10, 20, 30, 40, 50]?

Paso 1: Mover todos los elementos 20, 30, 40, 50 una posición hacia atrás
Paso 2: Insertar 15 en el espacio vacío

[10, 15, 20, 30, 40, 50]

Si hay 1 millón de datos, al insertar al principio es necesario desplazar los 1 millón de elementos.


Lista enlazada: memoria dispersa

En una lista enlazada, cada elemento recuerda la ubicación del siguiente elemento.

text
[10|→] → [20|→] → [30|→] → [40|→] → [50|∅]

Cada nodo = valor + dirección del siguiente nodo (puntero)

No es necesario que los nodos estén ubicados en posiciones contiguas en la memoria. Cada nodo solo necesita saber cuál es el siguiente.

Ventajas de las listas enlazadas: inserción y eliminación

text
Inserción de 25 después de 20 en [10|→] → [20|→] → [30|→]:

Paso 1: Crear nuevo nodo [25|→]
Paso 2: Cambiar el puntero de 20 a 25 y el puntero de 25 a 30

[10|→] → [20|→] → [25|→] → [30|→]

No es necesario desplazar otros nodos. Basta con modificar dos punteros. O(1).

Desventaja de las listas enlazadas: acceso.

python
# "¿Cuál es el tercer valor?"
# Arreglo: arr[3] → inmediato (O(1))
# Lista enlazada: desde el inicio 1→2→3 siguiendo (O(n))

Como no hay índices, para encontrar el valor en la posición n-ésima, hay que recorrerlo desde el principio n veces.


Resumen comparativo

OperaciónArregloLista enlazada
Acceso por índiceO(1) inmediatoO(n) requiere recorrido
BúsquedaO(n) recorridoO(n) recorrido
Inserción al inicioO(n) desplazamientoO(1) cambio de puntero
Inserción al finalO(1) añade al finalO(1) si hay puntero a cola
Inserción intermediaO(n) desplazamientoO(1) cambio de puntero
MemoriaRequiere contigüidadPuede estar dispersa

Criterios de selección

SituaciónRecomendado
Acceso frecuente por índiceArreglo
Inserciones/eliminaciones frecuentesLista enlazada
Tamaño que cambia frecuentementeLista enlazada
Importancia de la eficiencia de memoriaArreglo (sin sobrecarga de punteros)
Necesidad de compatibilidad con cachéArreglo (memoria contigua)

En la práctica, la mayoría utiliza arreglos (listas en Python, Arrays en JavaScript). Los arreglos dinámicos de los lenguajes modernos ajustan su tamaño automáticamente y son favorables para la caché de la CPU. Las listas enlazadas se utilizan en situaciones especiales (implementación de colas, pilas, inserciones/eliminaciones a gran escala).


💬 Preguntas y comentarios

0 comentarios

Puedes publicar sin iniciar sesión. Los comentarios de invitados no pueden editarse ni eliminarse después.

0/2000

Cargando...