43

Qué son y para qué sirven las estructuras de datos

15628Puntos

hace 2 años

Cuando estás iniciando en el mundo de la programación, uno de los conceptos más difíciles de entender son las estructuras de datos y las definiciones que usualmente se encuentran son un tanto enredadas, el propósito de este artículo es que entiendas qué son y por qué se usan las estructuras de datos.

Disclamer: Voy a explicarlas de la forma más natural posible así que omitiré ciertos detalles para que entiendas el concepto general.

¿Qué son las estructuras de datos?

Piensa en ellas como una forma de representar información. Así como usamos una variable de tipo array para representar un número finito de elementos, podemos representar una lista en una estructura de datos de tipo lista enlazada, esta estructura puede ser creada por nosotros o provista por una librería. Las estructuras de datos no solo representan la información, también tienen un comportamiento interno, y se rige por ciertas reglas/restricciones dadas por la forma en que esta construida internamente.

¿Por qué son útiles?

Las estructuras de datos nos permiten resolver un problema de manera más sencilla gracias a que las reglas que las rigen nunca cambian, así que puedes asumir que ciertas cosas son siempre ciertas. Adicionalmente son dinámicas, si usas lenguajes de programación como Java, sabrás que necesitas definir el tamaño de los arrays antes de ser usados. Usando una estructura de datos, puedes hacer “un array” de tamaño indeterminado.

Ejemplo

Necesito hacer un programa que apile una serie de nombre de libros como entrada, y que me diga cuál es el último libro, el problema es que vamos a apilar N libros.

En este ejemplo usaremos Java. El primer problema es que en Java no podemos establecer un array de N elementos, entonces usemos la estructura de datos de lista enlazada, que Java ya tiene implementado en la clase ArrayList.

Una lista enlazada es una estructura en donde podemos guardar N elementos, pero no es posible referenciar cada elemento por su índice, se debe iterar cada elemento. Para resolver el problema tenemos entonces que iterar todos los N elementos para obtener el valor de último. Esto es un problema. Si tenemos 10000 elementos tendremos que iterarlos todos solo para obtener el último, eso hace que el código mostrado a continuación sea más lento en tanto el número de elementos N sea mayor.

import java.util.*;

class Main {
  publicstaticvoid main(String[] args) {
    ArrayList<String> books = new ArrayList<String>();
    books.add("book 1");
    books.add("book 2");
    books.add("book 3");
    ....
    books.add("book n");

    String lastBook = "";
    for (String book: books) {
      lastBook = book;
    }
    System.out.println(lastBook);
  }
}

Para resolver el problema del tamaño podemos usar otra estructura de datos que se conoce como pila, la pila es una estructura de datos que también puede guardar N elementos, adicionalmente sigue la regla de el último elemento que entra, es el primero que sale. Gracias a esto para resolver el problema lo único que debo hacer es almacenarlos, y luego decirle a la estructura que retorne el último elemento.

import java.util.*;

class Main {
  publicstaticvoidmain(String[] args){
    Stack<String> stack = new Stack<>();
    stack.push("book 1");
    stack.push("book 2");
    stack.push("book 3");
    String lastBook = stack.pop();

    System.out.println(lastBook);
  }
}

Este código siempre correrá velozmente, independientemente del tamaño de N.

Como puedes ver, el problema pudo resolverse de forma más sencilla gracias a el uso de otra estructura de datos que internamente maneja reglas que nos ahorran mucho trabajo, y corre mucho más rápido.

Disclamer: este problema puede resolverse de una forma aún más sencilla, solo lo usé como ejemplo de cómo usar estructuras de datos

¿Por que son importantes las estructuras de datos?

Son herramientas que podemos usar para resolver problemas complejos, manteniendo nuestro codigo relativamente sencillo, y probablemente también hagan nuestro código más rápido, pero hay que entenderlas a fondo para saber cuándo debemos usar una vs. otra, tal y como lo vimos en el ejemplo.

Un solo blogpost no es suficiente para enseñarte todo lo relacionado a las estructuras de datos, pero espero que te haya servido para tener una idea general de lo que son, y que puedas aprender más respecto al tema.

David
David
@davidtoca

15628Puntos

hace 2 años

Todas sus entradas
Escribe tu comentario
+ 2
Ordenar por:
2
6599Puntos

Debería integrarse a un curso de algoritmos ¿Qué pasó con el que había?

1

El ArrayList<> es rápido para obtener un valor por su índice no es como dices, debería informarse más.

1
2403Puntos

Excelente artículo, David. Aunque por mers curiosidad.

Como sacarle más partido a la teoría matemática de estructuras discretas, como el estudio de grupos, segmentos, conjuntos, clases de equivalencias… Etc. De cierta forma te ayuda a ver las implementaciones y las formas óptimas de las TAD. ¿Algo más allá?

1
2322Puntos

Excelente articulo!! que tal un curso de Platzi del tema? 😃 gracias!

0
15628Puntos
2 años

Lo tendremos en cuenta 😄

0
9908Puntos

Hola! Quería saber si ya hay algún curso sobre este tema, o si lo van a sacar, en que fecha sería? Gracias!

0
7524Puntos

Muy buen post!!
Quizás algo de heurística ?

0
10Puntos

El grafo cuenta como estructura?

0
2403Puntos
2 años

Hasta donde he aprendido en la universidad los grafos en general son TAD, ya que con ellos representamos todas las demás conocidas como Arreglos, Lista, Diccionarios, etc…

0
7524Puntos
2 años

Un grafo es un TAD (Tipo abstracto de datos).

0
3953Puntos

Muy buen articulo amigo! Falto que hablaras sobre las Colas, y los tipos de listas que existen! Pero muy bien. Saludos

0
15628Puntos
2 años

si, queria mantenerlo sencillo, creo que el tema da para un curso completo, muchas gracias 😄

0
6227Puntos

Gracias David.
Por curiosidad ¿cuál es la forma aún más sencilla?

0
7524Puntos
2 años

Usualmente hay librerias que se encargan de esto.
Se pueden encontrar en C++, Java, Python, etc…

Tambien hay maneras hardcore de crearlas (Sin la ayuda de librerias) 😃

0
11268Puntos

Justamente le mencionaba este tema a Daniela (Maleadora) por correo. En mi carrera tenemos un cuatrimestre completo dedicado a estructura de datos. Pero para entenderlo lo vemos mas en detalle. Creando clases y tipos genericos e implementando interfaces con los metodos que deben tener estructuras de tipo lista enlazada, doblemente enlazadas, pilas y colas. Arboles binarios.
El problema es que no a todos se les hace facil sintetizar estos temas y entenderlos, y es muy bajo el porcentaje de alumnos que aprueban esta materia. Por eso mi consulta de si no hay pensado a futuro un curso dedicado a Estructuras.

0
14871Puntos
2 años

Espera sorpresas matías 😃