Algoritmos

🌱 ¿Por qué existen tantas estructuras?

Todas estas estructuras —arrays, linked lists, stacks, queues, y hash tables son distintas maneras de guardar y organizar datos en memoria.

No son teoría sin sentido: cada una está pensada para resolver un tipo diferente de problema de forma más rápida o más flexible que las demás.


📚 Imagina una biblioteca

Supón que administras una gran biblioteca con miles de libros.

Dependiendo de lo que necesites hacer, te conviene organizarlos de manera distinta:

Pregunta que te haces Estructura ideal ¿Por qué?
“Quiero guardar los libros en orden y acceder rápido por posición.” Array Cada posición está fija y puedes acceder con un índice (O(1)).
“Quiero agregar o quitar libros sin preocuparme por el tamaño.” Linked List Crece o disminuye sin copiar todo. Solo cambias enlaces.
“Quiero apilar libros y sacar siempre el último que puse.” Stack (pila) Modelo LIFO (Last In, First Out), como una torre de platos 🍽️.
“Quiero atender personas en orden de llegada.” Queue (cola) Modelo FIFO (First In, First Out), como una fila en el banco 🏦.
“Quiero buscar rápidamente un libro por su código o nombre.” Hash Table (mapa) Usa una función hash para encontrar datos en tiempo constante (O(1)).

💡 En palabras simples

  • Array: cuando necesitas orden fijo y acceso por índice.
    👉 Ejemplo: notas de los estudiantes [4.0, 3.8, 4.5].

  • Linked List: cuando no sabes cuántos elementos tendrás o harás muchas inserciones/eliminaciones.
    👉 Ejemplo: historial de páginas web (cada nodo enlaza al siguiente).

  • Stack: para manejar acciones reversibles o recursión.
    👉 Ejemplo: deshacer en Word o evaluar expresiones matemáticas.

  • Queue: para procesos en orden de llegada.
    👉 Ejemplo: cola de impresión o atención en soporte técnico.

  • Hash Table: para búsqueda ultrarrápida por clave.
    👉 Ejemplo: guardar usuarios por número de cédula (map["1032"] = "Danna").


🧩 En resumen visual


Array:       [0] [1] [2] [3] ...  → acceso directo por índice
LinkedList:  [A|•] → [B|•] → [C|∅] → fácil insertar/quitar
Stack:       ↑ push / ↓ pop → último que entra, primero que sale
Queue:       entrada → [1][2][3] → salida → primero que entra, primero que sale
HashTable:   "clave" → valor  (búsqueda rápida por clave)

No existe “la mejor estructura de datos”,
sino la más adecuada para el problema que estás resolviendo.

Aprenderlas es como tener un cinturón de herramientas 🧰: cada una sirve en el momento justo, y dominar su uso te convierte en una verdadera programadora estratégica 💻🐾.