• Arreglos
• Estructura (struct)
MSc Jaime Soto
Universidad Rafael UrdanetaEscuela de Ingeniería de Computación
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
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.
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 );
}
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.
#include <stdio.h>
void main() {
/* Con esto ya tenemos declaradas las 24 variables */
int temp[24]; 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 );
}
Un array es un conjunto finitoy ordenado 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.
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 suposición en la ordenación del vector.
Ejemplo de un Vector:
El vector temperatura, contiene las temperaturas horariasregistradas en una ciudad durante las 24 horas del día.
Este vector contiene 24 elementos de tipo REAL, ya que lastemperaturas no son siempre enteras.
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),donde 1<= I <=24
El valor máximo permitido de un vector sedenomina Límite Superior del vector (U).
El número de elementos de un vector se denominaRango del Vector. El rango del vector A(L:U) es U-L+1
Los vectores se almacenan en memoriacentral de la computadora en un orden adyacente.Así un vector de 50 números denominado NUMEROSse representa gráficamente por 50 posiciones dememoria sucesiva.
NUMEROS [0]
NUMEROS [1]
NUMEROS [2]
NUMEROS [50]
Dirección [X]
Dirección [X+1]
Dirección [X+2]
Dirección [X+49]
Memoria
Cada elemento de un vector se puede procesar como sifuese una variable simple al ocupar una posición de memoria.Así,
NUMEROS [25] = 72almacena el valor 72 en la posición 25ª, en este caso 72.
Para visualizar el valor almacenado en determinada posiciónseria:
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
Elemento
1
Elemento
2
Elemento
3
Elemento
4
Elemento
8
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
Operaciones a Realizar:
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
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?
Operaciones a Realizar:
Los subíndices de un vector pueden ser enteros,
variables o expresiones enteras.
Las operaciones que se pueden realizar convectores durante el proceso de resolución de unproblema 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
Notaciones algorítmicas
tipo
tipo_de_datos nombre_del_array [Tamaño]
Donde:
tipo_de_datos: Tipo de Datos de los elementos que contendrá elarreglo
nombre_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
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 deun vector, se debe recurrir a estructuras repetitivas(desde, mientras o repetir) e incluso selectivas (si-entonces, segú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
1. Asignación:
Ejemplo:
Ejemplo de Asignación en C:
#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.
2. Lectura / Escritura de Datos:
La lectura/escritura de datos enarrays u operaciones de entrada/salidanormalmente se realiza con estructurasrepetitivas, aunque también puedenhacerse con estructuras selectivas.
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óngeneral sobre todos los elementos de un vector sele denomina Recorrido del vector.
Estas operaciones se realizan utilizandoestructuras repetitivas, cuyas variables de control(por ejemplo I), se utilizan como subíndices delvector (por ejemplo S[I]).
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 tecladorellenará de valores el vectorF, comenzando con elelemento F[1] y terminandoF[20].
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
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.
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.
4. Actualización de un Vector:
La operación de insertar un elementoconsiste en introducir dicho elemento en el interiordel vector. En este caso se necesita undesplazamiento previo hacia abajo para colocar elelemento nuevo en su posición relativa
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
1
2
3
Alfa Romeo
Citroen
Fiat
4
5
Ford
Lancia
6
7
8
9
Opel
Renault
Seat
InsertarOpel
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 elmovimiento hacia arriba de los elementos inferiores aél para reorganizar el vector.
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
Realizar lo EJERCICIOS del Capitulo 7
del Libro de Fundamentos de Programación
De Luis Joyanes Aguilar
Página 283
Ejercicios del 7.1 al 7.6