← Volver
Fundamentos 3 min de lectura

¿Qué es una estructura de datos?

Una estructura de datos es una forma organizada de almacenar y operar datos en memoria. No hablamos solo de los datos, sino de cómo operarlos según cada situación.

Una estructura de datos es una forma organizada de almacenar y manipular datos en la memoria de la computadora. El objetivo es simple: habilitar acceso y modificación rápida según las necesidades del problema.

Pero acá hay una distinción que importa desde el día uno.

Estructura de Datos vs ADT

Un ADT (Abstract Data Type) define qué operaciones debe soportar una estructura, sin decir nada sobre cómo está implementada. Una estructura de datos es la implementación concreta que hace que ese concepto funcione.

El ADT es la idea. La estructura de datos es el código.

Ejemplo clásico — el ADT Stack define:

  • push(x) — agregar un elemento
  • pop() — quitar el último elemento
  • peek() — ver el tope sin quitarlo
  • isEmpty() — consultar si está vacío

Eso es todo. No dice nada sobre si usa un array o una linked list internamente. Podés implementarlo de cualquiera de las dos formas, con trade-offs distintos.

Este principio tiene un nombre en ingeniería de software: programar contra la abstracción, no contra la implementación. En Java es la diferencia entre declarar List<T> (el ADT) en lugar de ArrayList<T> (la implementación) — lo que te permite cambiar la estructura interna sin romper el contrato.

Clasificación por organización lógica

Lineales

Las estructuras lineales organizan los datos de forma secuencial. Cada elemento tiene un predecesor y un sucesor (excepto los extremos).

Ejemplos: Arrays, Listas, Stacks, Queues.

El recorrido es unidireccional o bidireccional, siempre sobre una sola dimensión.

No Lineales

Las estructuras no lineales organizan los datos de forma jerárquica o en red. Un elemento puede tener múltiples predecesores y múltiples sucesores.

Ejemplos: Árboles, Grafos.

El recorrido no es secuencial — podés ir "hacia arriba", "hacia abajo", "hacia la izquierda" o seguir múltiples caminos dependiendo de las conexiones.

Clasificación por gestión de memoria

Esta segunda clasificación se enfoca en la implementación, no en la organización lógica. Una misma estructura puede implementarse de forma estática o dinámica.

Estáticas

El tamaño se define al momento de la declaración y no puede cambiar durante la ejecución del programa.

El ejemplo canónico es el array en Java. Ventaja: acceso garantizado por posición en O(1), almacenamiento contiguo en memoria con excelente cache locality. Desventaja: no crece ni encoge.

Dinámicas

El tamaño puede modificarse durante la ejecución. Se pueden agregar y quitar elementos libremente.

El ejemplo es LinkedList en Java. Ventaja: maneja datos que crecen o decrecen. Desventaja: overhead de memoria por punteros, peor cache locality, acceso secuencial en lugar de directo.

Por qué importa esta distinción

La elección entre una estructura estática y una dinámica, o entre una lineal y una no lineal, no es una decisión técnica abstracta — es una decisión de trade-offs concreta.

Un array estático es la herramienta correcta cuando conocés el tamaño de antemano y necesitás acceso rápido por índice. Una linked list es correcta cuando insertás y eliminás frecuentemente en el medio. Un árbol es correcto cuando necesitás búsqueda eficiente con datos ordenados.

Conocer las estructuras es saber cuándo usar cada herramienta.

Siguiente · Fundamentos · 16 min Stacks y Queues: cuando el orden de acceso es el algoritmo Leer siguiente →