Presenta Estructuras de datos

18
TIPO DE DATO ESTRUCTURA (STRUCT) Por Rodrigo Vásquez

description

describe la relacion de la estructura de datos respecto de un lenguaje orientado a objetos.

Transcript of Presenta Estructuras de datos

Page 1: Presenta Estructuras de datos

TIPO DE DATO ESTRUCTURA (STRUCT)

Por Rodrigo Vásquez

Page 2: Presenta Estructuras de datos

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

Page 3: Presenta Estructuras de datos

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

Page 4: Presenta Estructuras de datos

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

Page 5: Presenta Estructuras de datos

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

Page 6: Presenta Estructuras de datos

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

Page 7: Presenta Estructuras de datos

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

Page 8: Presenta Estructuras de datos

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

Page 9: Presenta Estructuras de datos

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

Page 10: Presenta Estructuras de datos

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

Page 11: Presenta Estructuras de datos

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

Page 12: Presenta Estructuras de datos

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

Page 13: Presenta Estructuras de datos

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

Page 14: Presenta Estructuras de datos

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

Page 15: Presenta Estructuras de datos

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

Page 16: Presenta Estructuras de datos

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

Page 17: Presenta Estructuras de datos

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

Page 18: Presenta Estructuras de datos

FIN DE LA PRESENTACIONGRACIAS

Por Rodrigo Vásquez