49

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

17094Puntos

hace 4 años

Curso de Estructuras de Datos con JavaScript
Curso de Estructuras de Datos con JavaScript

Curso de Estructuras de Datos con JavaScript

Aumenta tus habilidades técnicas y organiza mejor la información con estructuras de datos. Domina lo que son listas, árboles, grafos y más para crear código más eficiente.

¿Qué son las estructuras de datos?

Las estructuras de datos son 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 está construida internamente.

Y es que 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. Por ejemplo si quieres conseguir un puesto como programador, debes sobrevivir a tu entrevista técnica de estructura de datos.

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

¿Por qué son útiles y para qué sirven las estructuras de datos?

Las estructuras de datos nos ayudan a 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 de estructura de datos

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 al uso de otra estructura de datos que internamente maneja reglas que nos ahorran mucho trabajo, y corre mucho más rápido.

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

¿Por qué son importantes las estructuras de datos?

Las estructuras de datos son importantes porque son herramientas que podemos usar para resolver problemas complejos, manteniendo nuestro código 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 con 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.

Curso de Estructuras de Datos con JavaScript
Curso de Estructuras de Datos con JavaScript

Curso de Estructuras de Datos con JavaScript

Aumenta tus habilidades técnicas y organiza mejor la información con estructuras de datos. Domina lo que son listas, árboles, grafos y más para crear código más eficiente.
David
David
davidtoca

17094Puntos

hace 4 años

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

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

2
3084Puntos

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

0
17094Puntos
4 años

Lo tendremos en cuenta 😄

1
5266Puntos

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

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

1
1899Puntos

Algún curso de estos temas, es decir estructura de datos, algoritmos básicos y avanzados, soluciones de problemas etc.

0
15824Puntos

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
15627Puntos
4 años

Espera sorpresas matías 😃

0
10348Puntos

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

0
9082Puntos
4 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
10Puntos

El grafo cuenta como estructura?

0
5266Puntos
4 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
9082Puntos
4 años

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

0
5091Puntos

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

0
17094Puntos
4 años

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

0
30737Puntos

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
9082Puntos

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