Articulo de referencia

Estructura de datos

Una estructura de datos conocida como tabla hash . En informática , una estructura de datos es una forma de organizar y almacenar datos que se suele elegir para un acceso eficie...

Una estructura de datos conocida como tabla hash .

En informática , una estructura de datos es una forma de organizar y almacenar datos que se suele elegir para un acceso eficiente a los mismos. [ 1 ] [ 2 ] [ 3 ] Más precisamente, una estructura de datos es la implementación física de un tipo de dato , incluyendo las especificaciones de la organización de los datos y el formato de almacenamiento, así como las funciones u operaciones para trabajar con estos datos. Las estructuras de datos están estrechamente relacionadas con los tipos de datos abstractos (TDA). [ 4 ] La estructura de datos describe la representación de los datos en memoria y cómo se llevan a cabo las operaciones, mientras que el TDA describe la forma lógica o la estructura algebraica del tipo de dato —qué operaciones están permitidas y qué resultados producen— sin describir cómo se implementan esas operaciones. [ 4 ] Algunos autores no utilizan el término "tipo de dato abstracto" y simplemente se refieren a las formas lógica y física de la estructura de datos. [ 5 ]

Uso

Las estructuras de datos eficientes son esenciales para gestionar grandes conjuntos de datos y fundamentales para el diseño de algoritmos. Las bases de datos relacionales suelen utilizar índices de árbol B para la recuperación de datos, [ 6 ] mientras que las implementaciones de compiladores suelen utilizar tablas hash para buscar identificadores . [ 7 ] Los sistemas de archivos y los motores de búsqueda hacen un uso extensivo de estructuras de datos especializadas. [ 8 ] [ 9 ] Rob Pike ha afirmado que la elección de la estructura de datos casi siempre tiene un mayor impacto en la eficiencia que la elección del algoritmo, ya que este último suele ser evidente por sí mismo. [ 10 ] Las estructuras de datos se utilizan para organizar los datos tanto en la memoria principal ( RAM ) como en el almacenamiento secundario (como los discos). [ 11 ]

Implementación

La implementación de una estructura de datos implica escribir un conjunto de subrutinas —como inserción, eliminación, recorrido o búsqueda— que crean y manipulan instancias de dicha estructura. Las estructuras de datos pueden implementarse utilizando diversos lenguajes y técnicas de programación. Una estructura de datos se corresponde directamente con una única implementación concreta, a diferencia de un TAD que describe el comportamiento y las operaciones independientemente de cualquier implementación particular. Puede haber múltiples estructuras de datos concretas para el mismo TAD; por ejemplo, una lista enlazada o un arreglo redimensionable para el TAD lista. [ 12 ] Por lo tanto, la eficiencia de una estructura de datos está estrechamente ligada a su implementación concreta y debe evaluarse mediante pruebas comparativas y simulaciones teóricas. [ 13 ]

Las estructuras de datos generalmente dependen de la capacidad de una computadora para almacenar y acceder a datos a través de direcciones de memoria (especificadas por un puntero —una cadena de bits— o, de forma más abstracta, mediante referencias ) que pueden almacenarse en memoria y ser manipuladas por el programa. Por ejemplo, los arreglos y registros almacenan elementos en ubicaciones de memoria contiguas, lo que requiere una disposición rígida pero permite un acceso indexado rápido mediante el cálculo de la dirección a través de operaciones aritméticas . En contraste, las estructuras de datos enlazadas (como las listas enlazadas y los árboles) almacenan direcciones de elementos relacionados dentro de su estructura, lo que permite un uso flexible de la memoria y un redimensionamiento dinámico. Estos diferentes métodos de estructuración de datos presentan diferentes ventajas y desventajas, y se adaptan a diferentes tareas. Por ejemplo, la asignación de memoria contigua en los arreglos facilita las operaciones rápidas de acceso y modificación, lo que optimiza el rendimiento en escenarios de procesamiento de datos secuenciales. [ 14 ]

Ejemplos

La jerarquía de tipos estándar del lenguaje de programación Python 3 .

Existen numerosos tipos de estructuras de datos, generalmente construidas a partir de tipos de datos primitivos más simples . Algunos ejemplos conocidos son: [ 15 ]

  • Un array es una serie de elementos ordenados de forma específica, generalmente todos del mismo tipo (dependiendo del lenguaje, los elementos individuales pueden estar obligados a ser del mismo tipo o pueden ser de casi cualquier tipo). Se accede a los elementos mediante un índice entero que especifica el elemento deseado. Las implementaciones típicas asignan palabras de memoria contiguas para los elementos de los arrays (aunque esto no siempre es necesario). Los arrays pueden tener una longitud fija o ser redimensionables.
  • Una lista enlazada (también llamada simplemente lista ) es una colección lineal de elementos de datos de cualquier tipo, denominados nodos, donde cada nodo tiene un valor y apunta al siguiente nodo de la lista. La principal ventaja de una lista enlazada sobre un array es que los valores se pueden insertar y eliminar de forma eficiente sin necesidad de reubicar el resto de la lista. Sin embargo, ciertas operaciones, como el acceso aleatorio a un elemento específico, son más lentas en las listas que en los arrays.
  • Un registro (también llamado tupla o estructura ) es una estructura de datos agregada . Un registro es un valor que contiene otros valores, generalmente en número y secuencia fijos, y normalmente indexados por nombres. Los elementos de los registros se denominan habitualmente campos o miembros . En el contexto de la programación orientada a objetos , los registros se conocen como estructuras de datos simples para distinguirlos de los objetos. [ 16 ]
  • Las tablas hash , también conocidas como mapas hash, son estructuras de datos que permiten la recuperación rápida de valores a partir de claves. Utilizan una función hash para asignar claves a índices en un array, lo que permite un acceso en tiempo constante en promedio. Las tablas hash se utilizan comúnmente en diccionarios, cachés e indexación de bases de datos. Sin embargo, pueden producirse colisiones de hash, lo que puede afectar su rendimiento. Para gestionar estas colisiones, se emplean técnicas como el encadenamiento y el direccionamiento abierto.
  • Los grafos son conjuntos de nodos conectados por aristas que representan relaciones entre entidades. Se pueden usar para modelar redes sociales, redes informáticas y redes de transporte, entre otras cosas. Están compuestos por vértices (nodos) y aristas (conexiones entre nodos). Los grafos pueden ser dirigidos o no dirigidos, y pueden tener ciclos o ser acíclicos. Los algoritmos de recorrido de grafos incluyen la búsqueda en amplitud y la búsqueda en profundidad.
  • Las pilas y las colas son tipos de datos abstractos que se pueden implementar mediante arreglos o listas enlazadas. Una pila tiene dos operaciones principales: insertar (añadir un elemento a la parte superior de la pila) y extraer (eliminar el elemento superior de la pila), que siguen el principio LIFO (último en entrar, primero en salir). Las colas tienen dos operaciones principales: encolar (añadir un elemento al final de la cola) y desencolar (eliminar un elemento del principio de la cola), que siguen el principio FIFO (primero en entrar, primero en salir).
  • Los árboles representan una organización jerárquica de elementos. Un árbol consta de nodos conectados por aristas, donde un nodo es la raíz y todos los demás forman subárboles. Los árboles se utilizan ampliamente en diversos algoritmos y escenarios de almacenamiento de datos. Los árboles binarios (en particular, los montículos ), los árboles AVL y los árboles B son algunos tipos populares de árboles. Permiten una búsqueda, ordenación y representación jerárquica de datos eficiente y óptima.
  • Un trie , o árbol de prefijos, es un tipo especial de árbol que se utiliza para recuperar cadenas de caracteres de forma eficiente. En un trie, cada nodo representa un carácter de una cadena, y las aristas entre los nodos representan los caracteres que los conectan. Esta estructura es especialmente útil para tareas como el autocompletado, la corrección ortográfica y la creación de diccionarios. Los tries permiten realizar búsquedas y operaciones rápidas basadas en prefijos de cadenas.

Soporte de idiomas

La mayoría de los lenguajes ensamblador y algunos lenguajes de bajo nivel , como BCPL (Basic Combined Programming Language), carecen de soporte integrado para estructuras de datos. Por otro lado, muchos lenguajes de programación de alto nivel y algunos lenguajes ensamblador de nivel superior, como MASM , cuentan con sintaxis especial u otro tipo de soporte integrado para ciertas estructuras de datos, como registros y matrices. Por ejemplo, los lenguajes C (descendiente directo de BCPL) y Pascal admiten estructuras y registros, respectivamente, además de vectores ( matrices unidimensionales ) y matrices multidimensionales. [ 17 ] [ 18 ]

La mayoría de los lenguajes de programación incluyen algún tipo de mecanismo de biblioteca que permite reutilizar las implementaciones de estructuras de datos en diferentes programas. Los lenguajes modernos suelen venir con bibliotecas estándar que implementan las estructuras de datos más comunes. Algunos ejemplos son la Biblioteca de Plantillas Estándar de C++ , el Marco de Colecciones de Java y el Marco .NET de Microsoft .

Los lenguajes modernos también suelen admitir la programación modular , es decir, la separación entre la interfaz de un módulo de biblioteca y su implementación. Algunos proporcionan tipos de datos opacos que permiten a los clientes ocultar los detalles de implementación. Los lenguajes de programación orientados a objetos , como C++ , Java y Smalltalk , suelen utilizar clases para este fin.

Muchas estructuras de datos conocidas tienen versiones concurrentes que permiten que múltiples hilos de computación accedan simultáneamente a una única instancia concreta de una estructura de datos. [ 19 ]

Véase también

Referencias

  1. ^ Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2009). Introducción a los algoritmos, tercera edición (3.ª ed.). The MIT Press. pág. 9. ISBN 978-0262033848Una estructura de datos es una forma de almacenar y organizar datos para facilitar el acceso y las modificaciones .
  2. ^ Black, Paul E. (15 de diciembre de 2004). "estructura de datos" . En Pieterse, Vreda; Black, Paul E. (eds.). Diccionario de algoritmos y estructuras de datos [en línea] . Instituto Nacional de Estándares y Tecnología . Recuperado el 6 de noviembre de 2018. Una organización de información, generalmente en memoria, para una mayor eficiencia de los algoritmos, como cola, pila, lista enlazada, montón, diccionario y árbol, o unidad conceptual, como el nombre y la dirección de una persona. Puede incluir información redundante, como la longitud de la lista o el número de nodos en un subárbol.
  3. ^ "Estructura de datos" . Enciclopedia Británica . 17 de abril de 2017. Consultado el 6 de noviembre de 2018. Forma en que se almacenan los datos para una búsqueda y recuperación eficientes .
  4. ^ a b "1.2 Tipos de datos abstractos" . Virginia Tech - CS3 Estructuras de datos y algoritmos . Archivado del original el 10 de febrero de 2023. Recuperado el 15 de febrero de 2023 .
  5. ^ Wegner, Peter; Reilly, Edwin D. (29 de agosto de 2003). Enciclopedia de Ciencias de la Computación . Chichester, Reino Unido: John Wiley and Sons. págs.  507–512 . ISBN 978-0470864128.
  6. ^ Gavin Powell (2006). «Capítulo 8: Creación de modelos de bases de datos de alto rendimiento» . Introducción al diseño de bases de datos . Wrox Publishing . ISBN 978-0-7645-7490-0Archivado del original el 18 de agosto de 2007.
  7. ^ "1.5 Aplicaciones de una tabla hash" . Universidad de Regina - Laboratorio CS210: Tabla hash . Archivado del original el 27 de abril de 2021. Recuperado el 14 de junio de 2018 .
  8. ^ Smith, Roderick W. (2000). Manual de configuración de arranque múltiple . Que Publishing. pág. 303. ISBN 978-0-7897-2283-6.
  9. ^ Mehta, Dinesh P.; Sahni, Sartaj (21 de febrero de 2018). Manual de estructuras de datos y aplicaciones . Taylor & Francis. pág. 799. ISBN 978-1-4987-0188-4.
  10. ^ "Las 5 reglas de programación de Rob Pike" . www.cs.unc.edu . Consultado el 11 de mayo de 2026 .
  11. ^ "Cuando los datos son demasiado grandes para caber en la memoria principal" . Universidad de Indiana Bloomington - Estructuras de datos (C343/A594) . 2014. Archivado del original el 10 de abril de 2018.
  12. ^ Tsiknis, George K. "UNIDAD 3: Tipos de datos concretos" (PDF) . CICS 216. Consultado el 11 de mayo de 2026 .
  13. ^ Horowitz, Ellis; Sahni, Sartaj (1984). Fundamentos de estructuras de datos . Rockville: Computer Science Press. ISBN 9780914894209El patrón de comportamiento o perfil de rendimiento de un algoritmo se mide en términos del tiempo y el espacio de computación que se consumen mientras el algoritmo está procesando .
  14. ^ Nievergelt, Jürg; Widmayer, Peter (2000-01-01), "Capítulo 17 - Estructuras de datos espaciales: conceptos y opciones de diseño" , en Sack, J.-R.; Urrutia, J. (eds.), Handbook of Computational Geometry , Ámsterdam: North-Holland, pp.  725–764 , ISBN 978-0-444-82537-7, consultado el 12 de noviembre de 2023
  15. ^ Seymour, Lipschutz (2014). Estructuras de datos (Primera edición revisada). Nueva Delhi, India: McGraw Hill Education. ISBN 9781259029967OCLC 927793728 ​
  16. ^ Walter E. Brown (29 de septiembre de 1999). "Nota sobre el lenguaje C++: Tipos POD" . Laboratorio Nacional de Aceleradores Fermi . Archivado del original el 3 de diciembre de 2016. Consultado el 6 de diciembre de 2016 .
  17. ^ "El manual de C de GNU" . Fundación del Software Libre . Consultado el 15 de octubre de 2014 .
  18. ^ Van Canneyt, Michaël (septiembre de 2017). "Free Pascal: Guía de referencia" . Free Pascal. Archivado del original el 22 de enero de 2026.
  19. ^ Mark Moir y Nir Shavit. "Estructuras de datos concurrentes" (PDF) . cs.tau.ac.il. Archivado del original (PDF) el 1 de abril de 2011.

Bibliografía

Lecturas adicionales

  • Descripciones del Diccionario de Algoritmos y Estructuras de Datos
  • Curso de estructuras de datos
  • Un análisis de las estructuras de datos desde la perspectiva de .NET
  • Schaffer, C. Estructuras de datos y análisis de algoritmos
Obtenido de " https://en.wikipedia.org/w/index.php?title=Data_structure&oldid=1360645830 "