Una estructura de datos es una forma de formatear los datos para que puedan ser utilizados por un programa informático u otro sistema. Las estructuras de datos son un componente fundamental de la informática porque dan forma a puntos de datos abstractos. De esta manera, permiten a los usuarios y sistemas organizar, trabajar y almacenar datos de manera eficiente.
Las estructuras de datos combinan tipos de datos primitivos, como números, caracteres, valores booleanos y enteros en un formato cohesivo. Por sí solos, cada uno de estos tipos de datos primitivos posee un solo valor. Cuando se combinan en una estructura de datos, permiten operaciones de datos de nivel superior, como la clasificación, la búsqueda, la inserción y la eliminación.
Por ejemplo, considere un equipo de ventas que quiere realizar un seguimiento de las cifras de ventas diarias. En lugar de almacenar cada punto de datos por separado, el equipo podría registrar estos datos en un tipo de estructura de datos llamada "matriz". (Para obtener más información, consulte “Tipos de estructuras de datos”).
En Python, la matriz podría verse así:
El uso de una matriz permite al equipo mantener todos estos datos juntos, recuperar fácilmente puntos de datos cuando sea necesario y realizar funciones tanto en elementos individuales como en toda la matriz.
Los programadores informáticos confían en las estructuras de datos para crear aplicaciones eficaces. En los campos de la informática y la ciencia de datos, las estructuras de datos son esenciales para los sistemas operativos, bases de datos, sitios web, gráficos, analytics, blockchain, aplicaciones de machine learning (ML) y más.
Debido a que las estructuras de datos son fundamentales para escribir código efectivo, a menudo se encuentran entre las primeras lecciones que se enseñan a los principiantes de programación. También son un tema común de las preguntas de las entrevistas para los candidatos a trabajos de programación informática.
Las estructuras de datos son importantes porque facilitan que las computadoras procesen conjuntos de información grandes y complejos. Al organizar lógicamente los elementos de datos, las estructuras de datos aumentan la eficiencia del código informático y hacen que el código sea más fácil de entender.
Los programadores utilizan estructuras de datos para mejorar la velocidad y la fuerza de los algoritmos, que son conjuntos de instrucciones para completar una tarea informática. En programación informática, esta combinación se conoce como "DSA" para "estructuras de datos y algoritmos". El DSA ayuda a los programadores a abordar los desafíos gemelos de la complejidad del tiempo y la complejidad del espacio.
La complejidad del tiempo es una medida de cuánto tiempo tarda un algoritmo en completar una tarea en función de la cantidad de entrada. La complejidad del espacio es una medida de cuánta memoria utiliza el algoritmo en función de la cantidad de entrada.
Utilizando la notación matemática Big O, los programadores pueden medir la complejidad del espacio y el tiempo. Luego, pueden determinar qué estructuras de datos y algoritmos proporcionan el tiempo de ejecución más rápido y la mayor eficiencia de espacio para una tarea específica.
Las estructuras de datos también desempeñan un papel importante en la programación dinámica, una técnica para resolver rápidamente problemas complejos.
La programación dinámica utiliza la recursividad para separar un problema en componentes más pequeños. Luego, el programa encuentra soluciones para esos componentes y vuelve a ensamblar las subsoluciones en una solución completa al problema original.
Las estructuras de datos permiten la programación dinámica al dar al programa una forma de almacenar y recuperar cada subsolución, y al mantener los elementos de datos organizados lógicamente durante el proceso.
Por ejemplo, los valores calculados se pueden mantener en una matriz. En lugar de volver a calcular estos valores cuando llega el momento de formular la solución completa, el programa puede recuperarlos de la matriz.
Con estas capacidades, los programadores pueden ahorrar tiempo y resolver problemas de manera más eficiente.
Las estructuras de datos se dividen en 2 categorías principales: lineales y no lineales.
En una estructura de datos lineal, los datos se organizan en una línea, con cada elemento de datos colocado uno tras otro en secuencia. Esta disposición facilita el desplazamiento y el acceso a los elementos en orden.
Las estructuras de datos lineales se consideran sencillas y fáciles de implementar. Las estructuras de datos comunes en esta categoría incluyen matrices, listas vinculadas y colas.
En una estructura de datos no lineal, la lógica organizacional es algo más que un arreglo lineal y secuencial. Por ejemplo, los puntos de datos pueden ordenarse jerárquicamente o conectarse en una red.
Debido a que no están conectados entre sí en una sola línea, no se puede recorrer y acceder a todos los elementos de una estructura no lineal en una sola ejecución, como ocurre en una estructura de datos lineal. Los ejemplos de estructuras de datos no lineales incluyen árboles y gráficos.
Hay varios tipos de estructuras de datos que los programadores pueden usar según los sistemas que están construyendo y lo que necesitan hacer con los datos. Las estructuras de datos comunes incluyen:
Las matrices son uno de los tipos de estructuras de datos más básicos y ampliamente utilizados. Almacenan elementos de datos de un tipo similar en ubicaciones de memoria adyacentes. Esta estructura permite localizar y acceder fácilmente a elementos del mismo tipo.
Usos: los usos comunes de las matrices incluyen ordenar, almacenar, buscar y acceder a datos. Las matrices también se pueden utilizar como base para implementar otras estructuras de datos, como colas y pilas.
Ejemplo: Una matriz de los puntajes promedio de satisfacción del cliente de un centro de atención telefónica cada día podría verse así:
Una estructura de datos de cola realiza operaciones de datos en un orden predeterminado llamado "FIFO", "primero en entrar, primero en salir". Esto significa que el primer elemento de datos que se agregue será el primero en eliminarse. Los programadores suelen utilizar esta estructura de datos para crear colas de prioridad, que son similares a las listas de espera.
Usos: las estructuras de datos de cola se pueden utilizar para determinar la siguiente canción en una lista de reproducción, el próximo usuario que tendrá acceso a una impresora compartida o la próxima llamada que se responderá en un centro de atención telefónica.
Ejemplo: Los clientes que esperan para hablar con un representante del centro de atención telefónica pueden colocarse en una cola como esta:
Cuando un representante está disponible, se conecta automáticamente con el primer cliente de la cola, que luego se elimina de la lista. Ahora, la cola se ve así:
Al igual que las colas, una estructura de datos de pila realiza operaciones de datos en un orden predeterminado. Sin embargo, en lugar de FIFO, las pilas utilizan el formato "LIFO", que significa "último en entrar, primero en salir". El último elemento de datos que se agregue será el primero en eliminarse.
Usos: las pilas se pueden utilizar para ayudar a garantizar la correcta apertura y cierre de corchetes o etiquetas en códigos informáticos, rastrear el historial reciente del navegador o deshacer operaciones recientes en una aplicación.
Ejemplo: Muchas aplicaciones utilizan pilas para realizar un seguimiento de las acciones del usuario para que puedan deshacerlas fácilmente. Por ejemplo, un editor de texto podría mantener una pila que se vea así:
Cuando un usuario presiona el botón "deshacer", se deshace la acción más reciente de la pila, "escribir 'T'". Ahora, la pila se ve así:
Las listas vinculadas almacenan elementos de datos en un orden lineal, con cada elemento conectado al siguiente elemento de la lista. Esta estructura facilita la inserción de nuevos elementos o la eliminación de elementos existentes sin tener que cambiar toda la colección de datos.
Usos: las listas vinculadas se utilizan a menudo para inserciones y eliminaciones frecuentes en escenarios, como historiales de navegadores web, listas de reproducción de reproductores multimedia y operaciones de deshacer o rehacer en aplicaciones.
Ejemplo: Una versión simplificada de una lista vinculada de videos en un reproductor multimedia podría verse así:
Cada objeto de la lista apunta al siguiente, por lo que cuando termine el Video 1, indicará al reproductor multimedia que inicie el Video 2.
Una estructura de datos de árbol, a veces llamada árbol de prefijos, es útil para establecer relaciones jerárquicas entre elementos de datos. Un único nodo principal se encuentra en la parte superior de la estructura de árbol, con subnodos secundarios que se ramifican en niveles posteriores debajo de él.
Las diferentes clases de árboles, como los árboles de búsqueda binaria, los árboles AVL y los árboles b, tienen diferentes propiedades y admiten diferentes funciones. Por ejemplo, en un árbol de búsqueda binario, cada nodo tiene como máximo 2 hijos. Esta estructura ayuda a admitir búsquedas rápidas de conjuntos de datos.
Usos: los árboles se utilizan a menudo para representar jerarquías en mapas organizacionales, sistemas de archivos, sistemas de nombres de dominio, indexación de bases de datos y árboles de decisión en aplicaciones de machine learning.
Ejemplo:
Una estructura de datos de gráficos organiza las relaciones entre diferentes objetos mediante el uso de vértices y bordes. Los vértices son puntos de datos "representados" por puntos, y los bordes son líneas que conectan los vértices.
Por ejemplo, en un mapa, las ciudades serían vértices y las carreteras que las conectan serían bordes. En Facebook, los usuarios serían vértices y las amistades que los conectan serían bordes.
Usos: las estructuras de datos de gráficos se utilizan a menudo con algoritmos de búsqueda que buscan datos dentro de complejas redes de relaciones. Los ejemplos comunes incluyen búsquedas en amplitud, que buscan a través de los datos nivel por nivel, y búsquedas en profundidad, que profundizan en múltiples niveles de datos para encontrar información.
Ejemplo:
Una estructura de datos hash, a veces denominada "tabla hash" o "mapa hash", utiliza una función hash para almacenar valores de datos. La función hash crea un hash, que es una clave digital única que corresponde a la ubicación de un valor de datos específico en la memoria.
La tabla hash contiene un índice de búsqueda de cada par de valores hash y datos, lo que hace que sea rápido y fácil acceder, agregar y eliminar datos de la tabla.
Usos: las estructuras de datos hash pueden ayudar a recuperar rápidamente datos de guías telefónicas, diccionarios y directorios de personal. También se pueden utilizar para indexar bases de datos, almacenar contraseñas y equilibrar la carga de los sistemas de TI.
Ejemplo: Una versión simplificada de una tabla hash que organiza la lista de contactos de un teléfono inteligente podría verse así:
La función hash asigna cada clave al índice apropiado. Entonces, cuando un usuario ingresa una clave (el nombre de un contacto), la tabla hash devuelve el valor asociado en el mismo índice (el número del contacto).
Las estructuras de datos son críticas en el diseño de aplicaciones de software porque implementan las formas concretas de tipos de datos abstractos.
Un tipo de datos abstracto es un modelo matemático que clasifica cómo se comporta un tipo de datos y las operaciones que se pueden realizar en él. Por ejemplo, el tipo de datos abstracto de una cola define el comportamiento de la cola (siguiendo el principio de FIFO). La estructura de datos de la cola proporciona una forma de formatear los datos en una cola, de modo que un programa informático aplique el principio FIFO a esos datos.
Muchos lenguajes de programación, como Python, Java y JavaScript, incluyen estructuras de datos integradas para ayudar a los desarrolladores a trabajar de manera más eficiente.
Los casos de uso comunes para estructuras de datos en programas informáticos incluyen:
Las estructuras de datos pueden almacenar datos de forma lógica y eficiente con altos niveles de persistencia de datos, por lo que los datos siguen siendo fácilmente accesibles desde bases de datos y otras aplicaciones. Las estructuras de datos también pueden proporcionar una organización lógica para grandes cantidades de datos para que puedan clasificarse, ordenarse y procesarse más fácilmente.
Por ejemplo, un sitio web puede usar listas vinculadas para almacenar registros de actividad de los usuarios. Las listas pueden registrar eventos en orden cronológico, y los enlaces entre eventos pueden ayudar a obtener una imagen completa de lo que hace un usuario a lo largo de cada sesión.
Las estructuras de datos pueden indexar información asignando valores de datos a elementos de datos correspondientes en una base de datos, lo que facilita la localización y el acceso a esos registros de datos.
Por ejemplo, un sitio web de comercio electrónico puede usar una tabla hash para indexar productos en categorías. Cuando un usuario quiere ver solo una categoría, el sitio web puede usar el valor hash para recuperar rápidamente todos los productos relacionados en lugar de buscar en la base de datos de cada producto.
Las estructuras de datos organizan los datos para que puedan compartirse fácilmente entre aplicaciones. Por ejemplo, muchas aplicaciones utilizan colas para gestionar y enviar paquetes a través de protocolos como TCP/IP. Las colas ayudan a garantizar que los paquetes se envíen y reciban en el orden en que se crearon.
Al organizar los datos para que sean más sencillos de entender para las aplicaciones y los usuarios finales, las estructuras de datos facilitan la búsqueda y localización de datos.
Por ejemplo, las estructuras de datos gráficos pueden facilitar a los usuarios la búsqueda de personas que conocen en los sitios de redes sociales. Las estructuras de datos de gráficos registran las relaciones entre vértices o nodos. Los algoritmos de búsqueda pueden seguir las conexiones de nodo a nodo para localizar de manera eficiente a los usuarios relacionados.
Las estructuras de datos respaldan la escalabilidad del sistema al ayudar a los programas informáticos a procesar grandes conjuntos de datos, resolver problemas complejos y utilizar los recursos de manera más eficiente.
Por ejemplo, tanto las tablas hash como las estructuras de árbol pueden facilitar la localización de información relevante en grandes conjuntos de datos. En lugar de inspeccionar cada elemento, los sistemas solo necesitan usar la clave correcta o seguir el camino correcto a través del árbol. Esto ayuda a mantener un alto rendimiento porque el sistema no necesita utilizar muchos recursos para buscar en cantidades masivas de datos.
Diseñe una estrategia de datos que elimine los silos de datos, reduzca la complejidad y mejore la calidad de los datos para ofrecer experiencias excepcionales a clientes y empleados.
watsonx.data le permite escalar los analytics y la IA con todos sus datos, sin importar donde residan, a través de un almacén de datos abierto, híbrido y gobernado.
Desbloquee el valor de los datos empresariales con IBM Consulting, y construya una organización impulsada por insights que ofrezca ventajas empresariales.