ALGORITMOS Y PROGRAMACIÓN IUnidad 3
Tipos de Datos Estructurados
Prof. Jaime Soto
Sección (007)
Material original de Prof. AURELY LEAL
Introducción a las Estructuras de Datos
Una estructura de datos es una colección dedatos que pueden ser caracterizados por suorganización y las operaciones que se definen enella.
Datos Estructurados
Estáticos
Dinámicos
Arrays (Vectores / Matrices)
Registros
Ficheros
Cadenas
Listas (Pilas/Colas)
Listas Enlazadas
Árboles
Grafos
Introducción a las Estructuras de Datos
Los tipos de Datos SIMPLES pueden serorganizados en diferentes estructuras de datos:Estáticas y Dinámicas.
Las Estructuras de Datos Estáticas son aquellasen la que el tamaño ocupado en memoria se defineantes de que el programa se ejecute y no puedemodificarse dicho tamaño durante la ejecución delprograma.
Las Estructuras de Datos Dinámicas no tienen laslimitaciones o restricciones en el tamaño de memoriaocupada que son propias de las estructurasestáticas. Mediante el uso de un puntero, puedenconstruir estructuras dinámicas.
Algoritmos y Programación I – Unidad III
Introducción a las Estructuras de Datos
Supongamos queremos guardar en el ordenador la
temperatura que ha hecho cada hora del día. Para darle cierta
utilidad al final calcularemos la media de las temperaturas.
El programa en C quedaría así:
#include <stdio.h>
void main()
{
/* Declaramos 24 variables, una para cada hora del dia */
int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8;
int temp9, temp10, temp11, temp12, temp13, temp14, temp15, temp16;
int temp17, temp18, temp19, temp20, temp21, temp22, temp23;
int media;
/* Ahora tenemos que dar el valor de cada una */
printf( "Introduzca las 24 temperaturas l separadas por un espacio: " );
scanf( "%i %i %i ... %i", &temp0, &temp1, &temp2, ... &temp23 );
media = ( temp0 + temp1 + temp2 + temp3 + temp4 + ... + temp23 ) / 24;
printf( "\nLa temperatura media es %i\n", media );
}
Algoritmos y Programación I – Unidad III
Introducción a las Estructuras de Datos
Como se puede observar, el programa es largo, y
seria poco eficiente si se tratara, por ejemplo, de tomar la
temperatura de las 24 horas del día, de todos los días del
año ¿Cuántas variables serian? MUCHAS.
Aquí es cuando surgen la maravilla de los Arrays,
los cuales se pueden interpretar como una colección de
variables de un mismo tipo.
Algoritmos y Programación I – Unidad III
Introducción a las Estructuras de Datos
#include <stdio.h>
void main()
{
int temp[24]; /* Con esto ya tenemos declaradas las 24 variables */
float media; int hora;
/* Ahora tenemos que dar el valor de cada una */
for( hora=0; hora<24; hora++ )
{
printf( "Temperatura de las %i: ", hora );
scanf( "%i", &temp[hora] );
media += temp[hora];
}
media = media / 24;
printf( "\nLa temperatura media es %f\n", media );
}
Arrays
Un array es un conjunto finito yordenado de elementoshomogéneos.
Propiedades:
Ordenado. Significa que todos los
elementos del arreglo pueden ser
identificados.
Homogéneos. Significa que todos los
elementos del array son del mismo
tipo.
Los arrays también son conocidos
como matrices o tablas.
Algoritmos y Programación I – Unidad III
Arrays Unidimensionales: Los Vectores
El tipo más simple de Array es el array Unidimensional ovector (Matriz de una Dimensión).
Notas (0) Notas (1) …….. Notas (I) …….. Notas (N)
Vector denominado Notas
El subíndice o índice de un elemento (0,1,2,…,i,n) designa su posiciónen la ordenación del vector.
Ejemplo de un Vector:
El vector temperatura, contiene las temperaturas horarias registradas enuna ciudad durante las 24 horas del día.
Este vector contiene 24 elementos de tipo REAL, ya que lastemperaturas no son siempre enteras.
Algoritmos y Programación I – Unidad III
Arrays Unidimensionales: Los Vectores
El valor mínimo permitido de un vector se denominaLímite Inferior del vector (L)
Ejemplo Temperatura:
El limite inferior es 1 y el superior 25, entonces Temperatura (I), donde1<= I <=24
El valor máximo permitido de un vector se denominaLímite Superior del vector (U).
El número de elementos de un vector se denomina Rangodel Vector. El rango del vector A(L:U) es U-L+1
Algoritmos y Programación I – Unidad III
Arrays Unidimensionales: Los Vectores
Los vectores se almacenan en memoria centralde la computadora en un orden adyacente. Así unvector de 50 números denominado NUMEROS serepresenta gráficamente por 50 posiciones dememoria sucesiva.
Algoritmos y Programación I – Unidad III
NUMEROS [0]
NUMEROS [1]
NUMEROS [2]
NUMEROS [50]
Dirección [X]
Dirección [X+1]
Dirección [X+2]
Dirección [X+49]
Memoria
Arrays Unidimensionales: Los Vectores
Cada elemento de un vector se puede procesar como si fuese unavariable simple al ocupar una posición de memoria. Así,
NUMEROS [25] = 72
almacena el valor 72 en la posición 25ª, en este caso 72.
Para visualizar el valor almacenado en determinada posición seria:
escribir NUMEROS [25]
visualiza el valor en la posición 25ª, en este caso 72.
Algoritmos y Programación I – Unidad III
Consideremos un vector X de 8 elementos:
X[0] X[1] X[2] X[3] X[4] X[5] X[6] X[7]
14.0 12.0 8.0 7.0 6.41 5.23 6.15 7.25
Elemento1 Elemento2 Elemento3 Elemento4 Elemento8
Operaciones a Realizar:
Acciones Resultado
Escribir (X[0]) Visualiza el valor 14.0
X[3] ←45 Almacena el valor 45 en x[4]
SUMA ← X[0] +
X[2]
Almacena en la variable suma, la suma de X[0] + X[2],
es decir, 22.0
X[4] ← X[4] + 3,5 Suma 3.5 a X[4]; el nuevo valor de X[4] será 9.91
X[5] ← X[0] + X[1] Almacena la suma de X[0] y X[1] en X[5], 26.5
X[0] X[1] X[2] X[3] X[4] X[5] X[6] X[7]
14.0 12.0 8.0 45.0 9.91 26.5 6.15 7.25
Vector Resultante
Consideremos un vector X de 8 elementos:
X[0] X[1] X[2] X[3] X[4] X[5] X[6] X[7]
12 5 -7 14.5 20 1.5 2.5 -10
Operaciones a Realizar:
Acciones Resultado
I ←4
X [I+1] Representa el elemento X(5) de valor 1.5.
X [I+2] Representa el elemento X(6) de valor 2.5.
X [I-2] Representa el elemento X(2) de valor -7
X [I+3] ¿Qué valor representa?
Los subíndices de un vector pueden ser enteros,
variables o expresiones enteras.
Algoritmos y Programación I – Unidad III
Operaciones con Vectores.
Las operaciones que se pueden realizar con vectoresdurante el proceso de resolución de un problema son:
Asignación.
Lectura/Escritura.
Recorrido (acceso Secuencial)
Actualizar (Añadir, Borrar, Insertar)
Ordenación
Búsqueda
Las operaciones con vectores implican elprocesamiento o tratamiento de los elementosindividuales del vector
Algoritmos y Programación I – Unidad III
Operaciones con Vectores.
Notaciones algorítmicas
tipo
tipo_de_datos nombre_del_array [Tamaño]
Donde:
tipo_de_datos: Tipo de Datos de los elementos que contendrá el arreglonombre_array: Nombre válido del array.
Tamaño Numero de Elementos que contendrá el arreglo
Tipo
int NOMBRES [10]
NOMBRES es un arrayunidimensional de 10elementos de tipo int
Tipo
double LISTA [24]
Representa un vectorcuyos elementos son 24,de tipo double
Algoritmos y Programación I – Unidad III
Operaciones con Vectores.
1. Asignación:
La asignación de valores a un elemento del vector se realizará con lainstrucción de asignación:
A[29] ← 5 asigna el valor 5 al elemento 20 del vector A
Si desea asignar valores a todos los elementos de unvector, se debe recurrir a estructuras repetitivas (desde,mientras o repetir) e incluso selectivas (si-entonces, segun).
Algoritmos y Programación I – Unidad III
Operaciones con Vectores.
1. Asignación:
Si se introducen los valores 5,7,8,
14 y 12 mediante asignaciones.
Si se desea dar el mismo valor a todos
los elementos, la notación algorítmica
se simplifica.
A[0] ← 5
A[1] ← 7
A[2] ← 8
A[3] ← 14
A[4] ← 12
desde i=0 hasta 4 hacer
A [i] ← 8
fin_desde.
Valores: A[0]=8, A[1]=8,….., A[5]=8
Ejemplo:
Algoritmos y Programación I – Unidad III
Operaciones con Vectores.
Ejemplo de Asignación en C:
Algoritmos y Programación I – Unidad III
#include <stdio.h>
void main()
{
int hora;
int temperaturas[24] = { 15, 18, 20, 23, 22, 24, 22,25, 26, 25, 24, 22, 21, 20, 18, 17, 16, 17, 15, 14, 14,14, 13, 12 };
for (hora=0 ; hora<24 ; hora++ )
{
printf( "La temperatura a las %i era de %igrados.\n", hora, temperaturas[hora] );
}
}
Se pueden inicializararreglos, asignándolesvalor al comienzo delprograma.
Operaciones con Vectores.
2. Lectura / Escritura de Datos:
La lectura/escritura de datos en arrays uoperaciones de entrada/salida normalmentese realiza con estructuras repetitivas, aunquetambién pueden hacerse con estructurasselectivas.
Algoritmos y Programación I – Unidad III
Operaciones con Vectores.
2. Acceso Secuencial al Vector (recorrido)
Se puede acceder a los elementos de unvector para Introducir Datos (Escribir) en el o bienpara Visualizar su Contenido (Leer).
A la operación de efectuar una acción generalsobre todos los elementos de un vector se ledenomina Recorrido del vector.
Estas operaciones se realizan utilizandoestructuras repetitivas, cuyas variables de control (porejemplo I), se utilizan como subíndices del vector (porejemplo S[I]).
Algoritmos y Programación I – Unidad III
Operaciones con Vectores.
2. Acceso Secuencial al Vector (recorrido)
Ejemplo 1. Lectura de veinte valores enteros de un vectordenominado F
Procedimiento 1
algoritmo leer_vector
tipo
int FINAL[20]
Var
FINAL: F
inicio
desde i← 0 hasta 19 hacer
leer (F[i])
fin_desde
fin
La lectura de veinte valoressucesivos desde el teclado rellenaráde valores el vector F, comenzandocon el elemento F[1] y terminandoF[20].
Algoritmos y Programación I – Unidad III
Operaciones con Vectores.
2. Acceso Secuencial al Vector (recorrido)
Ejemplo 1. Lectura de veinte valores enteros de un vectordenominado F, utilizando bucle mientras.
Procedimiento 2
algoritmo leer_vector
tipo
int FINAL[20]
Var
FINAL: F
inicio
i← 0
mientras i <= 19 hacer
leer (F[i])
i ← i +1
fin_mientras
fin
Operaciones con Vectores.
2. Acceso Secuencial al Vector (recorrido)
Ejemplo 1. Lectura de veinte valores enteros de un vectordenominado F, utilizando bucle repetir
Procedimiento 3
algoritmo leer_vector
tipo
int FINAL[20]
Var
FINAL: F
inicio
i← 0
repetir
leer (F[i])
i ← i +1
hasta_que i>19
fin
Ejemplo 2.
Este ejemplo procesa un array PUNTOS, realizando lassiguientes operaciones: Lectura, Cálculo de la Suma de losvalores del Array y Cálculo de la media de los valores.
algoritmo mediapuntos
const LIMITE= 40
tipo
real PUNTUACION [LIMITE]
var
PUNTUACION: puntos
real: suma, media
entero: i
inicio
suma ← 0
escribir (´ Datos del Array ´)
desde ← 1 hasta LIMITE hacer
leer (Puntos [i])
suma ← suma + puntos [i]
fin_desde
media ← suma/ LIMITE
escribir (´ La media es: ´, media)
fin
#include <stdio.h>
#include <conio.h>
main()
{
int vector[7]; /* Tipo_de_datos nombre_del_array [Tamaño] */
int c; /* Contador */
for (c=0;c<=6;c++)
{
printf ("Numero para guardar en vector[%d]:,c);
scanf ("%d",&vector[c]);
}
for (c=0;c<=6;c++)
{
/* Para mostrar los datos del vector */
printf("\nValor Vector[%d]=%d",c,vector[c]);
}
getch();
}
Ejemplo de Acceso Secuencial en C
4. Actualización de un Vector:
La operación de actualizar un vector, puedeconstar a su vez de 3 operaciones elementales:
Añadir, Insertar y Borrar elementos.
Operaciones con Vectores.
Se denomina añadir datos a un vector la operaciónde añadir un nuevo elemento al final del vector.
La única condición necesaria para esta operaciónconsistirá en la comprobación de espacio dememoria suficiente para el nuevo vector.
Algoritmos y Programación I – Unidad III
4. Actualización de un Vector:
La operación de insertar un elemento consisteen introducir dicho elemento en el interior del vector.En este caso se necesita un desplazamiento previohacia abajo para colocar el elemento nuevo en suposición relativa
Operaciones con Vectores.
1
2
3
Alfa Romeo
Fiat
Ford
4
5
Lancia
Renault
6
7
8
9
Seat
1
2
3
Alfa Romeo
Fiat
Ford
4
5
Lancia
Opel
6
7
8
9
Renault
Seat
InsertarOpel
1
2
3
Alfa Romeo
Citroen
Fiat
4
5
Ford
Lancia
6
7
8
9
Opel
Renault
Seat
InsertarCitroen
4. Actualización de un Vector:
La operación de borrar un elemento al final delvector no presenta ningún problema; el borrado de unelemento del interior del vector provoca el movimientohacia arriba de los elementos inferiores a él parareorganizar el vector.
Operaciones con Vectores.
algoritmo borrado
inicio
AUX ← COCHES [J]
desde i ← j hasta N-1 hacer
// llevar el elemento j+1 hacia arriba
leer (Puntos [i])
COCHES [i] ← COCHES [i + 1]
fin_desde
//actualizar contador de elementos
// ahora tendra un elemento menos, N-1
N ← N-1
fin