Estructura de datos


Los datos con los que hemos trabajado hasta ahora son datos simples, iniciaremos en este tema el estudio y aplicación de datos estructurados.  Una estructura de datos es un conjunto de datos referenciado por un mismo nombre.

Las estructuras de datos pueden se estáticas como los arreglos o vectores, las matrices, registros, ficheros o archivos. También tenemos estructuras de datos dinámicas que pueden ser lineales como las pilas, colas o listas enlazadas y la estructura de datos dinámica no lineal como los árboles o los grafos.

Arreglos

Llamamos arreglo a las estructuras de datos lineales estáticas como el arreglo vectorial, así como el arreglo matricial. Los arreglos se identifican por un nombre igual que cualquier variable válida seguido de uno o varios índices entre paréntesis o corchetes que nos indican la posición de memoria donde se almacenan.

Arreglos de una dimensión

Los arreglos unidimensionales llamados vectores o listas son una estructura de datos cuyos elementos son todos del mismo tipo y en los que existe un orden.  El orden viene dado por el índice del vector. 

Ejemplo

Suponga que tiene las edades de un grupo de 31 alumnos; si no cuenta con un arreglo o estructura de datos tipo vector, al trabajar con estos valores al mismo tiempo, tendría que definir 31 variables para almacenar cada una de las edades en la memoria de la máquina. Un arreglo vectorial para almacenar ese conjunto de datos es algo como la siguiente representación intuitiva.

en pseudocódigo, para declarar un arreglo e indicar el tipo de dato de los valores del array vamos a utilizar la siguiente sintaxis

 

tipo_de_dato nombre_del_arreglo[tamaño]

 

El <tamaño> del arreglo determina el número de valores (del mismo tipo de dato) que pueden ser almacenados en el arreglo.

Volviendo al vector E de las edades de un grupo de 31 estudiantes, declaramos y definimos el arreglo de la siguiente manera:

 

// Declaración de un array de 31 elementos

   Entero edad[31] {}

 

   // Asignación de valores a los elementos del array

   edad[1] <- 12

   edad[2] <- 11

   edad[3] <- 10

   edad[4] <- 12

                .

                .

                .

 

   edad[30] <- 12

   edad[31] <- 11

 

Donde:

edad es el nombre del arreglo y

edad[1] = 12, edad[2] = 11, edad[3] = 10, edad[4] = 12

Lectura/escritura de datos

Al ser un array una estructura lineal que contiene un conjunto de datos, la lectura y/o escritura de datos se realizan con estructuras repetitivas. Las instrucciones de lectura/escritura se suelen ser representadas de la siguiente manera:

leer(V[5])                           leer el elemento número 5 del vector V

escribir(V[12])               escribir el dato guardado en la posición 12 del vector V

Inicializar un arreglo

Los arreglos al igual que cualquier otra variable pueden ser inicializados al declararlos.  Así por ejemplo si tenemos un arreglo que almacena distintas temperaturas registradas en una institución meteorológica, podríamos inicializar un determinado registro de la siguiente manera: int temperaturas[24] = { 25, 18, 27, 32, 42, 28, 29, 25, 23, 25, 34, 32, 31, 22, 18, 17, 15, 17, 15, 13, 24, 34, 33, 32 }; el primer elemento del vector corresponde al elemento 0 (que será el primero), es decir temperaturas[0] que registra un valor de 25. El elemento 1 (el segundo) valdrá 18 y así sucesivamente.

De igual forma podríamos inicializar un arreglo con una lista vacía, por ejemplo, un vector calificaciones de 31 estudiantes, puede inicializarse así: calificaciones[31]{ }

Acceso secuencial al vector

Se puede acceder a los elementos de un vector para escribir, leer o bien modificar el valor en una posición del vector mediante alguna estructura de repetición, ciclo o bucle estudiados antes.

Ejemplo:

Mientras (k < 15) hacer

                Leer(H[k])

Fin-mientras

 

Ejemplo:

Leer 12 números, almacenarlos en un arreglo y escribirlos en pantalla.

Algoritmo

Entero cantidadß12;

// Declaración de un array de 12 elementos tipo entero

   Entero num[12]{ }

 

   // Lectura de los elementos del array

Para i<-1 Hasta cantidad Hacer

Escribir "Ingrese un numero para la posición ", i

Leer num[i]

FinPara

// Escritura de los elementos del array

 

Escribir "Los números digitados son : "

Para i<-1 Hasta cantidad Hacer

Escribir num[i]

FinPara

FinAlgoritmo

 

Diagrama N-S

Código C++

Si codificamos en el lenguaje C++ tenemos un inconveniente con el tamaño al momento de trabajar y definir los arreglos como estructura de datos. No es posible crear de una manera simple un vector o matriz con capacidad de almacenamiento indefinida.

 

Cuando declaramos un arreglo vectorial o matricial en C++ es necesario ingresar con antelación la cantidad de datos (tamaño) como un valor constante, que el vector o la matriz tendrá. 

Ejemplo:

Un vector N del tipo entero conformado por 20 números pares consecutivos iniciando con el valor 2. Se debe obtener como resultados de salida la sumatoria de los 20 números pares y su media aritmética.

Solución:

Diagrama N-S

Código C++

Ejemplo:

Escriba un algoritmo que llene un arreglo de tamaño 10 con números reales leídos desde teclado. Calcular el promedio e indique cuántos elementos del arreglo son mayores que el promedio y cuántos menores o iguales.

Solución:

 Inicio

    const int DIM = 10;

    int menores = 0, mayores = 0;

    real May = 0, Min = 0, suma = 0,

        numReal = 0, Prom = 0, numR[DIM]{};

 

    Escriba("Ingrese 10 números reales separados por espacio: ")

    Para (int i = 0; i < DIM; i++)

        Leer(numR[i])       // Se lee el numero

 

        suma = suma + numR[i]

        Si(numR[i] > May)

            May = numR[i]

        Sino Si(numR[i] < May)

            Min = numR[i]

  

    // Salidas

    Prom = suma / DIM

    Para(int i = 0; i < DIM; i++)

        Si(numR[i] <= Prom)

            menores = menores + 1

        Sino

            mayores = mayores + 1

   

    Escriba("El promedio es ", Prom)

  

    Escriba("Números mayores que el promedio: ", mayores)

    Escriba("Números menores o iguales que el promedio: "), menores)

    Escriba("Número mayor: ", May, " número menor: ", Min)

Fin

Código C++