Publicado el 30 de Noviembre del 2018
486 visualizaciones desde el 30 de Noviembre del 2018
215,2 KB
47 paginas
Creado hace 8a (05/11/2015)
Objetivos
Conocer y saber utilizar diferentes
tipos de datos
estructurados:
– cómo se definen
– cómo están organizadas sus componentes
– cómo se accede a ellas y
– sus operaciones y algoritmos básicos
Tema: Estructuras de Datos
2
Índice
• Estructuras de datos en Memoria Principal
– Vectores
– Matrices
– Cadenas de caracteres
– Estructuras
Tema: Estructuras de Datos
3
Estructuras de datos
Tipo de datos estructurado:
– Están formados por otros datos (simples o también
estructurados) entre los que hay una relación lógica.
– Un dato estructurado agrupa colecciones de datos que
interesa manejar globalmente, p.ej. una fecha
– Se caracterizan por:
El tipo de las componentes que se estructuran
El método de estructuración
Tema: Estructuras de Datos
4
Estructuras de datos
• Estructuras de datos en Memoria Principal
– Estáticas: Arrays, Cadenas, Estructuras…
– Dinámicas
Estructuras acotadas:
El número de componentes se
fija en el momento de la
definición.
Estructuras no acotadas:
El número de componentes
puede variar durante la
ejecución.
• Estructuras de datos en Memoria Externa
– Ficheros
Tema: Estructuras de Datos
5
Arrays
• Un array es una colección de datos todos del mismo tipo, a
las que se llama con un mismo nombre.
• Los elementos de un array se referencian a través de un
nombre y un índice. El nombre es común a los elementos y el
índice indica la posición del elemento (componente) dentro
del array.
• El número de componentes de un array es finito y prefijado
de antemano (estructura acotada).
• Las componentes de un array se almacenan en memoria en
posiciones consecutivas.
Tema: Estructuras de Datos
6
Arrays
• Cuando el array tiene una única dimensión se le llama vector.
• Los datos almacenados en un array se llaman elementos y se
numeran consecutivamente del 0 en adelante. A estos
números se les llama índices del array.
• El tipo de datos de los elementos puede ser cualquier tipo de
datos de C.
0 1 2 3 4
8.8
5.0
3.2
notas
7.1
5.6
Tema: Estructuras de Datos
7
Declaración de Arrays
• Para declarar un array debemos indicar el tipo de datos de
sus elementos y el tamaño o longitud del array, es decir,
cuántos elementos tiene:
tipo_elem nombre_array [tamaño]
Siendo:
tipo_elem: el tipo de los elementos del vector
nombre_array: identificador
tamaño: indica el número de elementos del vector, puede ser
una expresión constante
Tema: Estructuras de Datos
8
Declaración de Arrays. Ejemplos
• Ejemplo 1:
float notas[5] //define un array de 5 elementos reales
float alturas[20] //define un array de 20 elementos reales
int edades[10]
char linea[80]
• Ejemplo 2:
//define un array de 10 elementos enteros
//define un array de 80 elementos carácter
#define Max 4
void main(void)
{
int vector[Max], v2[Max+1];
Tema: Estructuras de Datos
…
9
Acceso a los Elementos
• Para acceder a cada uno de los elementos del array:
nombre_array[posición]
Siendo:
posición: una expresión de tipo entera. Es un valor
comprendido entre 0 y (tamaño del vector) – 1
Tema: Estructuras de Datos
10
Acceso a los Elementos. Ejemplos
Si tenemos declarado:
float notas[5]
y hemos asignado valores al vector. Gráficamente :
0 1 2 3 4
notas
5.0
3.2
7.1
5.6
8.7
notas[3] accede a la cuarta componente del array notas
Ejemplos de formas de acceso a las componentes del vector notas:
notas[3]=5.6;
printf(“%f”, notas[3]);
notas[3]=notas[3]+1;
Tema: Estructuras de Datos
La posición se puede poner también
como una expresión entera:
int i = 2;
notas[i] = notas[i] * 3;
notas[i+2] = 8.7;
11
Arrays
• C no comprueba los límites del array, es responsabilidad
del programador no rebasar los límites.
Si tenemos declarado el vector:
int v[5];
El compilador no da error si hacemos:
v[7] = 34; //pero es un error puede existir sobreescritura
Ejemplo:
• Operaciones y restricciones:
– No se pueden comparar vectores, ni asignar directamente
un vector en otro, ni lectura o escritura directa.
– Estas operaciones se efectúan elemento a elemento.
Tema: Estructuras de Datos
12
Inicialización de un Array
• Existen varias formas de inicializar los elementos
de un array:
– con asignaciones, recorriendo el vector
– con lecturas, sobre cada uno de los elementos
– en la declaración, asignando valores
Tema: Estructuras de Datos
13
Inicialización de un Array
• con asignaciones, recorriendo el vector:
float notas[5];
int i;
for (i=0; i<5; i++)
notas[i] = 0.0;
• con lecturas, sobre cada uno de los elementos:
float notas[5];
int i;
printf (“\n Escribe las 5 notas: ”);
for (i=0; i<5; i++)
scanf(“%f”,¬as[i]);
Tema: Estructuras de Datos
14
Inicialización de un Array
• en la declaración, asignando valores:
float notas[5]= {10.0, 8.5, 3.75, 7.0, 7.5};
int v[3]= {5, 16, -7};
int vect[8] ={0}; // almacena 0 en las ocho componentes
De otra forma: se pueden dejar los corchetes vacíos, hay
que introducir tantos valores como elementos tenga el vector
float notas[]= {10.0, 8.5, 3.75, 7.0, 7.5};
int vector[]= {5, 16, -7}
Tema: Estructuras de Datos
15
Ejemplo
Realizar un programa C para almacenar las 15 notas de un examen, calcular la
nota media y mostrar en pantalla cuántas notas están por encima de la media.
#include <stdio.h>
#define N 15
void main()
{
printf("intro un numero para notas[%d] ",i);
scanf("%f", ¬as[i]);
media=media+notas[i];
float notas[N], media=0.0;
Int i, cont=0;
for(i=0; i<N; i++)
{
}
media=media/N;
for(i=0; i<N; i++)
printf(“\nHay %d notas por encima de la nota media: %.2f", cont, media);
if(notas[i]>media) cont++;
}
Tema: Estructuras de Datos
16
Arrays como parámetros de función
• En C no se puede pasar el array completo como parámetro de
una función.
• La solución es pasar la dirección de memoria donde comienza a
almacenarse el array. Este valor se representa por el nombre
del array. Es decir, los arrays son siempre parámetros variables
(de salida o de entrada/salida).
• En el lenguaje C el paso de arrays a las funciones es una
excepción al convenio de llamada por valor estándar.
• En la llamada a la función, el lenguaje C, trata al argumento
(parámetro real o actual), como si hubiera situado el operador &
delante del nombre del array. El nombre el array es un puntero al
primer elemento de vector.
Tema: Estructuras de Datos
18
Arrays como parámetros de función
• La declaración, en una función, de un parámetro tipo vector
se realiza con uno de los siguientes formatos:
tipo_elem nombre_array [tamaño]
tipo_elem nombre_array []
tipo_elem *nomb
• En la llamada a una función: para pasar un array como
parámetro, hay que especificar el nombre del array sin
corchetes. Llamada a la función:
nombre_func (nombre_array)
El nombre del array es la dirección del primer elemento del array
(no se pone & delante del nombre del vector).
Tema: Estructuras de Datos
19
Arrays como parámetros de función
Ejemplo:
función que calcule la media de los elementos de un vector.
• la cabecera de la función mediaNotas, podría ser:
float mediaNotas(float n[20])
o bien: float mediaNotas(float n[])
• Si desde main queremos escribir la media de las notas con una
llamada a la función mediaNotas, pondríamos:
...
void main() {
float notas[20];
...
printf(“%f”, mediaNotas(notas));
/*notas debe aparecer sin [ ] y sin &*/
Tema: Estructuras de Datos
20
Ejemplo
• Función que suma los elementos de un vector.
int i;
int vector[10]={10,11,12,13,14,15,16,17,18,19};
for (i=0; i<10; i++)
printf("%d ",vector[i]);
#include <stdio.h>
int sumar (int v[]);
void main ()
{
printf("\n\nSuma de los elementos del array: ");
}
int sumar (int v[10])
{
}
printf("%3d",sumar(vector));
int result=0, j;
for (j=0; j<10; j++) result = result + v[j];
return result;
Tema: Estructuras de Datos
21
Vectores. Operaciones básicas
• Recorrer las componentes:
– Inicializar el vector
– Leer en las componentes
– Escribir las componentes
• Insertar o eliminar un elemento
• Buscar un elemento
• Ordenar las componentes
Tema: Estructuras de Datos
22
Vectores. Listas
// longitud contiene la cantidad de elementos válidos en el vector
REPRESENTAR una lista (subarray) de máximo 100 elementos enteros:
#define Max 100
void main(void)
{
int lista[Max], longitud;
Gráficamente, después de dar valores a las componentes:
longitud = 3
0 1 2 3 Max-1
lista
23 9 18 ... ? 12 34 ? ... ?
longitud - 1
Tema: Estructuras de Datos
23
Elementos de la lista
Operaciones con Arrays
• Recorrer un Vector. Pasa por todos los elementos de
Comentarios de: Tema 5: Estructuras de Datos (0)
No hay comentarios