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.
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.
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.
Disclaimer: este problema puede resolverse de una forma aún más sencilla, solo lo usé como ejemplo de cómo usar 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.
Algún curso de estos temas, es decir estructura de datos, algoritmos básicos y avanzados, soluciones de problemas etc.
Tienen una gran utilidad. No me lo imaginaba…