Presenta Estructuras de datos
-
Upload
kevin-chicas -
Category
Documents
-
view
214 -
download
0
description
Transcript of Presenta Estructuras de datos
TIPO DE DATO ESTRUCTURA (STRUCT)
Por Rodrigo Vásquez
DefiniciónEstructura (struct):
Se define como un tipo de datos estructurado formado por una colección de elementos no necesariamente iguales, a los cuales se les denomina miembros o componentes de la estructura.
Unión:Se define la unión como una estructura con características
especiales la cual permite que un conjunto o colección de datos se almacene de manera diferente.
Por Rodrigo Vásquez
Componentes de una estructura
Los componentes individuales de una estructura se llaman miembros y pueden contener valores de un tipo diferente de datos.Ejemplo: Si la estructura almacenara datos de una colección de discos compactos (CD de música). Los miembros estarán relacionados a los siguientes datos:
Número de Canciones
Artista
Titulo
Fecha de Compra
Precio
Por Rodrigo Vásquez
Declaración de una estructuraComo se observa en el ejemplo anterior los datos que almacenara la estructura los define el usuario, como parte de la tarea de diseño. Sin embargo, es necesario declararla para su posterior utilización.
El formato de la declaración es el siguiente: struct < nombre de la estructura > {
< tipo de dato miembro 1 > <nombre de miembro 1>
< tipo de dato miembro 2 > <nombre de miembro 2>
< tipo de dato miembro 3 > <nombre de miembro 3>
… < tipo de dato miembro n > <nombre de miembro n>
}
Por Rodrigo Vásquez
struct CD {
char titulo[30];char artista[25]; int NumCanciones; float Precio;
char fecha[8]; };
Declaración de una estructuraDeclaración de una estructura en lenguaje C:
Note que los componentes o miembros de la estructura pueden ser de cualquier tipo.
Por Rodrigo Vásquez
Definición de variables de estructuras
A una estructura se accesa utilizando una variable o variables que se deben definir después de la declaración de la estructura. En el lenguaje C, existen dos conceptos similares a considerar, Declaración y Definición.
La diferencia técnica consiste en que la declaración especifica el nombre y el tipo de datos de la estructura. Por otro lado, la definición de una variable para una estructura dada crea una área de memoria para el almacenamiento de los datos de acuerdo al formato declarado.
Por Rodrigo Vásquez
Definición de variables de estructuras
(Se anexan al final algunos ejemplos de declaración
y definición al final de la presentación.)
Las variables de estructuras se pueden definir de dos formas:
1. Listándolas después de la llave de cierre de la declaración de la estructura.
2. Listando el tipo de estructura creada seguida por las variables correspondientes en cualquier lugar del programa.
Por Rodrigo Vásquez
1. struct InfoAtleta{
char nombre[40];int edad;char sexo;char categoria[20];float tiempo;
} Atleta1, Atleta2, Atleta3;
O bien,
2. struct InfoAtleta Atleta1, Atleta2, Atleta3;
Ejemplo de declaración y definiciónDeclaración y definición de una estructura en lenguaje C:
Por Rodrigo Vásquez
Inicialización de una estructura Es posible inicializar una estructura de dos formas. La primera dentro de la sección de código del programa, y la segunda como parte de la definición. Ejemplo:
struct infolibro {
char titulo[60];char autor[30];char editorial[30];int anyo;
} Libro1 = { “La investigación ”, “Elssy Bonilla” , “Alfaomega”, 2009};
O
struct infolibro Libro1 = { “La investigación ” , “Elssy Bonilla” , “Alfaomega”, 2009};
Por Rodrigo Vásquez
Acceso a los componentes de una estructura
Se accede a una estructura para almacenar o recuperar datos de la misma. Existen dos formas.
Utilizando el operador punto(.)El operador punto proporciona el camino directo al miembro correspondiente.Ejemplo:
Asignando valores directamente.Atleta1.edad=23; strcpy(Atleta1.nombre, “Juan Hernández ”);
O bien a través del teclado
printf(“Nombre del atleta:”);gets(Atleta1.nombre”);
Por Rodrigo Vásquez
Acceso a los componentes de una estructura
Es recomendable que los datos se lean en variables auxiliares y luego se trasladen sus valores a los componentes de las estructuras.
char nombre[40]; printf(“Nombre del atleta:”);gets(nombre);strcpy(Atleta1.nombre, nombre);
Por Rodrigo Vásquez
Acceso a los componentes de una estructura
Utilizando el operador puntero (- > )
El operador puntero - > Sirve para acceder a los datos de la estructura a partir de un puntero. Para utilizar este operador primero se debe definir una variable puntero para direccionar hacia la estructura. Ejemplo:
struct InfoAtleta *ptrAtleta;// Asignar la dirección de memoria de la variable Atleta1 a la variable ptrAtleta.
ptrAtleta = &Atleta1;
Asignando valores directamente.ptrAtleta- > edad=23; strcpy(ptrAtleta1- > nombre, “Juan Hernández ”);
Por Rodrigo Vásquez
Acceso a los componentes de una estructuraEs recomendable que antes de acceder a los miembros de una estructura, con una variable puntero y el operador - >, la estructura tenga su espacio de almacenamiento creado. o bien, crear el espacio de almacenamiento en memoria con la función malloc().
struct InfoAuto{
char placa[7];char color[10];int añochar marca[10];
}typedef InfoAuto Auto;Auto *PtrAuto;PtrAuto=(Auto*)malloc(sizeof(Auto));
La definición de la izquierda solicita al sistema operativo, mediante la función malloc(), un bloque de memoria del tamaño en bytes correspondiente a la estructura Auto (29 bytes) y almacena la dirección del bloque en la variable puntero PtrAuto.
Por Rodrigo Vásquez
Recuperación de datos de una estructura
Se recupera información de una estructura utilizando el operador de asignación o una sentencia de salida (printf ( ) , puts ( ) , . . . ) . Igual que antes, se puede emplear el operador punto o el operador flecha (puntero).
El formato general toma una de estas dos formas:
1. <nombre variable> = <nombre variable estructura> . <nombre miembro>;o bien <nombre variable> = <puntero de estructura> -> <nombre miembro>;
2. Para salida:
printf (" " , <nombre variable estructura> . <nombre miembro>) ;o bien
printf (" " , <puntero de estructura> -> <nombre miembro>) ;
Por Rodrigo Vásquez
Estructuras anidadasUna estructura puede tener como miembro o componente a otra estructura o varias dependiendo del caso. Se dice que existe un beneficio relacionado al ahorro de tiempo cuando los programas utilizan estructuras similares. Se define la estructura componente una vez y esta se incluye como componente en una o varias estructuras en un programa.
struct fecha {
unsigned int dia, mes, anyo;}
struct empleado { char codigo[6]; char nombre[60]; struct fecha fechacontratacion; float salario;}
Las estructuras se pueden anidar a cualquier grado.
Por Rodrigo Vásquez
Arreglos de estructurasEs posible crear arreglos de estructuras. Esto implica que los arreglos pueden almacenar diferentes tipos de datos de acuerdo al diseño de la estructura. Los arreglos de estructuras son útiles para almacenar datos de grupos de empleados, productos, etc. Ejemplo:
Se define un arreglo de estructuras con capacidad para almacenar los datos de 50 atletas.
struct InfoAtleta Atletas[50];
Representación del arreglo de estructuras en memoria. (3350 bytes de memoria reservado)
nombre40 bytes
edad2bytes
sexo1byte
categoria20 bytes
tiempo4bytes
0
1
…
49
Por Rodrigo Vásquez
Arreglos de estructurasPara acceder a los miembros de cada uno de los elementos estructura se utiliza una notación de arreglo. Para inicializar el primer elemento de libros, por ejemplo, su código debe hacer referencia a los miembros de libros [0] de la forma siguiente:
strcpy(libros[0] .titulo, "C++ a su alcance") ;strcpy(libros[0] .autor, "Luis Joyanes") ;strcpy(libros[0] .editorial, "McGraw-Hill") ;libros [0] .anyo = 1999;
También puede inicializarse un arreglo de estructuras en el punto de la declaración encerrando la lista de inicializadores entre llaves, { }. Por ejemplo,
struct infolibro libros[3] = { "C++ a su alcance", "Luis Joyanes","McGraw-Hill", 1999, "Estructura de datos", "Luis Joyanes","McGraw-Hill", 1999, "Problemas en Pascal", "Ángel Hermoso","McGraw-Hill", 1997};
Por Rodrigo Vásquez
FIN DE LA PRESENTACIONGRACIAS
Por Rodrigo Vásquez