Saltar al contenido
schedule 10 min Lógica de Programación

Estructuras de datos

Hasta ahora has trabajado con variables individuales: un nombre, una edad, un precio. Pero piensa en el mundo real: tu lista de contactos no es UN contacto, es una colección de contactos. Tu playlist de Spotify no es UNA canción, es una lista de canciones. Y tu carrito de la compra no es UN producto, es un conjunto de productos. Para manejar colecciones de datos necesitas listas.

Listas: colecciones de cosas relacionadas

Una lista es exactamente lo que suena: un conjunto ordenado de elementos del mismo tipo. Como una lista de la compra, una cola de espera o los episodios de una serie. Cada elemento tiene una posición (empezando desde 1 en pseudocódigo) que te permite acceder a él directamente.

INICIO
    // Crear una lista de canciones
    canciones = ["Bohemian Rhapsody", "Hotel California", "Imagine", "Smells Like Teen Spirit"]

    // La lista tiene 4 elementos
    // Posición 1: "Bohemian Rhapsody"
    // Posición 2: "Hotel California"
    // Posición 3: "Imagine"
    // Posición 4: "Smells Like Teen Spirit"
FIN

Piensa en una lista como una estantería numerada. Cada hueco tiene un número y dentro hay un elemento. Puedes decir "dame lo que hay en el hueco 3" y obtienes "Imagine".

Acceder a elementos por posición

Cada elemento de una lista ocupa una posición. Es como los asientos de un cine: fila 1, asiento 3. Puedes ir directamente a cualquier posición sin tener que recorrer toda la lista.

INICIO
    playlist = ["Despacito", "Shape of You", "Blinding Lights", "Bad Guy", "Levitating"]

    // Acceder por posición
    MOSTRAR playlist[1]    // "Despacito" (el primero)
    MOSTRAR playlist[3]    // "Blinding Lights" (el tercero)
    MOSTRAR playlist[5]    // "Levitating" (el último)

    // Saber cuántos elementos tiene
    totalCanciones = LONGITUD(playlist)
    MOSTRAR "Tienes " + totalCanciones + " canciones"    // "Tienes 5 canciones"

    // Cambiar un elemento
    playlist[2] = "Flowers"
    // Ahora la lista es: ["Despacito", "Flowers", "Blinding Lights", "Bad Guy", "Levitating"]
FIN

Añadir y eliminar elementos

Las listas no son estáticas. Puedes añadir canciones a tu playlist, eliminar contactos de tu agenda o reorganizar tu lista de tareas:

INICIO
    tareas = ["Comprar leche", "Estudiar lógica"]

    // Añadir al final
    AÑADIR tareas, "Llamar al dentista"
    // tareas = ["Comprar leche", "Estudiar lógica", "Llamar al dentista"]

    // Añadir en una posición específica
    INSERTAR tareas, 2, "Pasear al perro"
    // tareas = ["Comprar leche", "Pasear al perro", "Estudiar lógica", "Llamar al dentista"]

    // Eliminar un elemento
    ELIMINAR tareas, 1
    // tareas = ["Pasear al perro", "Estudiar lógica", "Llamar al dentista"]
FIN

Buscar en una lista (búsqueda lineal)

Imagina que buscas una canción en tu playlist. No hay un atajo mágico: tienes que ir canción por canción hasta encontrarla (o llegar al final sin encontrarla). Esto se llama búsqueda lineal y es exactamente lo que haces cuando buscas tu nombre en una lista de asistentes que NO está ordenada.

FUNCION buscarCancion(playlist, nombreBuscado)
    PARA CADA cancion EN playlist HACER
        SI cancion == nombreBuscado ENTONCES
            DEVOLVER VERDADERO
        FIN SI
    FIN PARA CADA

    // Si llegamos aquí, no la encontramos
    DEVOLVER FALSO
FIN FUNCION

// Uso
playlist = ["Imagine", "Yesterday", "Bohemian Rhapsody", "Hotel California"]
encontrada = buscarCancion(playlist, "Yesterday")
MOSTRAR encontrada    // VERDADERO

encontrada = buscarCancion(playlist, "Despacito")
MOSTRAR encontrada    // FALSO

Es como buscar un libro en una estantería desordenada: no te queda otra que mirar uno por uno. Si la estantería tiene 1000 libros, en el peor caso tendrás que mirar los 1000.

Ordenar una lista

Ordenar es poner los elementos en un orden lógico: alfabético, de menor a mayor, por fecha, por puntuación. Piensa en cómo ordenas un mazo de cartas: coges una carta, la comparas con las demás y la pones en su sitio.

INICIO
    // Ordenar nombres alfabéticamente
    contactos = ["Zara", "Ana", "Miguel", "Carlos", "Elena"]
    ORDENAR contactos ASCENDENTE
    // Resultado: ["Ana", "Carlos", "Elena", "Miguel", "Zara"]

    // Ordenar números de mayor a menor
    puntuaciones = [85, 92, 67, 100, 78]
    ORDENAR puntuaciones DESCENDENTE
    // Resultado: [100, 92, 85, 78, 67]

    // Puedes saber el máximo y el mínimo fácilmente
    mejor = puntuaciones[1]     // 100 (el primero tras ordenar descendente)
    peor = puntuaciones[5]      // 67 (el último)
FIN

Filtrar una lista

Filtrar es quedarte solo con los elementos que cumplen una condición. Como cuando en Spotify filtras tu playlist por género, o en Netflix filtras películas por puntuación.

FUNCION filtrarPorGenero(canciones, generos, generoBuscado)
    resultado = []

    PARA i = 1 HASTA LONGITUD(canciones) HACER
        SI generos[i] == generoBuscado ENTONCES
            AÑADIR resultado, canciones[i]
        FIN SI
    FIN PARA

    DEVOLVER resultado
FIN FUNCION

// Datos de ejemplo
canciones = ["Bohemian Rhapsody", "Blinding Lights", "Smells Like Teen Spirit", "Starboy"]
generos   = ["Rock",             "Pop",              "Rock",                    "Pop"]

cancionesRock = filtrarPorGenero(canciones, generos, "Rock")
MOSTRAR cancionesRock    // ["Bohemian Rhapsody", "Smells Like Teen Spirit"]

cancionesPop = filtrarPorGenero(canciones, generos, "Pop")
MOSTRAR cancionesPop     // ["Blinding Lights", "Starboy"]

Ejemplo completo: playlist de Spotify

Vamos a combinar todo en un ejemplo real. Imagina que gestionas una playlist con estas operaciones: añadir canciones, buscar una canción, filtrar por género y ordenar por valoración.

INICIO
    // Nuestra playlist con nombres, géneros y valoraciones (1-5)
    nombres      = ["Bohemian Rhapsody", "Blinding Lights", "Imagine", "Bad Guy"]
    generos      = ["Rock",              "Pop",              "Rock",    "Pop"]
    valoraciones = [5,                   4,                  5,         3]

    // 1. Añadir una canción nueva
    AÑADIR nombres, "Stairway to Heaven"
    AÑADIR generos, "Rock"
    AÑADIR valoraciones, 5

    // 2. Buscar si tenemos "Imagine"
    encontrada = FALSO
    PARA CADA nombre EN nombres HACER
        SI nombre == "Imagine" ENTONCES
            encontrada = VERDADERO
        FIN SI
    FIN PARA CADA
    MOSTRAR "¿Tenemos Imagine? " + encontrada    // VERDADERO

    // 3. Filtrar solo las de Rock
    cancionesRock = []
    PARA i = 1 HASTA LONGITUD(nombres) HACER
        SI generos[i] == "Rock" ENTONCES
            AÑADIR cancionesRock, nombres[i]
        FIN SI
    FIN PARA
    MOSTRAR "Rock: " + cancionesRock
    // Rock: ["Bohemian Rhapsody", "Imagine", "Stairway to Heaven"]

    // 4. Encontrar la canción mejor valorada
    mejorNota = 0
    mejorCancion = ""
    PARA i = 1 HASTA LONGITUD(nombres) HACER
        SI valoraciones[i] > mejorNota ENTONCES
            mejorNota = valoraciones[i]
            mejorCancion = nombres[i]
        FIN SI
    FIN PARA
    MOSTRAR "Mejor canción: " + mejorCancion + " (" + mejorNota + "/5)"
FIN

Ejemplo: lista de contactos

Otro caso muy cotidiano. Tu agenda del móvil es básicamente una lista con operaciones de búsqueda, ordenación y filtrado:

INICIO
    nombres  = ["Zara López", "Ana García", "Miguel Torres", "Carlos Ruiz"]
    ciudades = ["Madrid",     "Barcelona",   "Madrid",        "Valencia"]
    telefonos = ["611111111", "622222222",   "633333333",     "644444444"]

    // Buscar un contacto por nombre
    buscar = "Miguel Torres"
    PARA i = 1 HASTA LONGITUD(nombres) HACER
        SI nombres[i] == buscar ENTONCES
            MOSTRAR "Encontrado: " + nombres[i]
            MOSTRAR "Ciudad: " + ciudades[i]
            MOSTRAR "Teléfono: " + telefonos[i]
        FIN SI
    FIN PARA

    // Filtrar contactos de Madrid
    contactosMadrid = []
    PARA i = 1 HASTA LONGITUD(nombres) HACER
        SI ciudades[i] == "Madrid" ENTONCES
            AÑADIR contactosMadrid, nombres[i]
        FIN SI
    FIN PARA
    MOSTRAR "Contactos en Madrid: " + contactosMadrid
    // ["Zara López", "Miguel Torres"]

    // Ordenar alfabéticamente
    ORDENAR nombres ASCENDENTE
    // ["Ana García", "Carlos Ruiz", "Miguel Torres", "Zara López"]
FIN

Resumen

  • Una lista es una colección ordenada de elementos del mismo tipo. Cada elemento tiene una posición numérica.
  • Puedes acceder a cualquier elemento por su posición, añadir nuevos elementos y eliminar los que ya no necesitas.
  • La búsqueda lineal recorre la lista elemento por elemento hasta encontrar lo que buscas (o llegar al final).
  • Ordenar es poner los elementos en un orden lógico: alfabético, numérico, por fecha, etc.
  • Filtrar es quedarte solo con los elementos que cumplen una condición.
  • Las listas son la base de casi todo lo que usas a diario: playlists, contactos, carritos de compra, feeds de redes sociales.

En la siguiente lección aprenderemos sobre pseudocódigo y diagramas de flujo: cómo escribir soluciones sin sintaxis y representarlas visualmente antes de tocar un lenguaje de programación.

code

Gestiona tu lista de películas pendientes

Intermedio schedule 15 min

Con papel y bolígrafo (o en un editor de texto), escribe el pseudocódigo para gestionar una lista de películas pendientes de ver. Empieza con esta lista:

  • Películas: "Interstellar", "Parásitos", "El Padrino", "Coco", "Dune", "Oppenheimer"
  • Géneros: "Sci-Fi", "Thriller", "Drama", "Animación", "Sci-Fi", "Drama"
  • Valoraciones: 9, 8.5, 9.2, 8.4, 8, 8.7

Tu pseudocódigo debe:

  1. Añadir la película "Everything Everywhere All at Once" (Sci-Fi, valoración 8.8).
  2. Eliminar "El Padrino" de la lista (ya la viste).
  3. Buscar si "Coco" está en la lista.
  4. Filtrar solo las películas de Sci-Fi.
  5. Ordenar todas las películas de mayor a menor valoración y mostrar cuál es la mejor.
lightbulb Pistas

Para eliminar, busca primero la posición del elemento. Para filtrar, recorre la lista y añade a una nueva lista solo los que cumplan la condición del género. Para ordenar por valoración y encontrar la mejor, puedes recorrer la lista buscando el valor máximo con una variable mejorNota.

Newsletter

Recibe nuevos cursos, actualizaciones, artículos del blog y promociones en tu correo.