Sunteți pe pagina 1din 18

TIPO DE DATO

ESTRUCTURA (STRUCT)

Por Rodrigo Vsquez

Definicin
Estructura (struct):

Se define como un tipo de datos estructurado


formado por una coleccin de elementos
no
necesariamente iguales, a los cuales se les
denomina miembros o componentes de la
estructura.
Unin:

Se define la unin como una estructura con


caractersticas especiales la cual permite que un
conjunto o coleccin de datos se almacene de
manera diferente.
Por Rodrigo Vsquez

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
coleccin de discos compactos (CD de msica). Los
miembros estarn relacionados a los siguientes
datos:
Titulo
Artista
Nmero de
Canciones
Precio
Fecha de Compra
Por Rodrigo Vsquez

Declaracin de una estructura


Como se observa en el ejemplo anterior los datos
Como se observa en el ejemplo anterior los datos
que almacenara la estructura los define el usuario,
que almacenara la estructura los define el usuario,
como parte de la tarea de diseo. Sin embargo, es
como parte de la tarea de diseo. Sin embargo, es
necesario declararla para su posterior utilizacin.
necesario declararla para su posterior utilizacin.
El formato de la declaracin es el siguiente:
El formato de la declaracin es el siguiente:
struct < nombre de la estructura >
struct < nombre de la estructura >
{
{
< tipo de dato miembro 1 > <nombre de miembro
< tipo de dato miembro 1 > <nombre de miembro
1>
1>
< tipo de dato miembro 2 > <nombre de miembro
< tipo de dato miembro 2 > <nombre de miembro
2>
2>
< tipo de dato miembro 3 > <nombre de miembro
< tipo de dato miembro 3 > <nombre de miembro
3>
3>

tipo de dato miembro n > <nombre de miembro n>


Por Rodrigo <
<Vsquez
tipo de dato miembro n > <nombre de miembro n>

Declaracin de una estructura


Declaracin de una estructura en lenguaje C:

struct CD
struct CD
{
{
char titulo[30];
char titulo[30];
char artista[25];
char artista[25];
int NumCanciones;
int NumCanciones;
float Precio;
float Precio;
char fecha[8];
char fecha[8];
};
};
Note que los componentes o miembros de la estructura pueden ser de
cualquier tipo.
Por Rodrigo Vsquez

Definicin de variables de estructuras


A una estructura se accesa utilizando una variable
A una estructura se accesa utilizando una variable
o variables que se deben definir despus de la
o variables que se deben definir despus de la
declaracin de la estructura. En el lenguaje C,
declaracin de la estructura. En el lenguaje C,
existen dos conceptos similares a considerar,
existen dos conceptos similares a considerar,
Declaracin y Definicin.
Declaracin y Definicin.
La diferencia tcnica consiste en que la
La diferencia tcnica consiste en que la
declaracin especifica el nombre y el tipo de datos
declaracin especifica el nombre y el tipo de datos
de la estructura. Por otro lado, la definicin de una
de la estructura. Por otro lado, la definicin de una
variable para una estructura dada crea una rea
variable para una estructura dada crea una rea
de memoria para el almacenamiento de los datos
de memoria para el almacenamiento de los datos
de acuerdo al formato declarado.
de
acuerdo
al formato declarado.
Por Rodrigo
Vsquez

Definicin de variables de estructuras


Las variables de estructuras se pueden definir de dos formas:

1. Listndolas despus de la llave de cierre de la


declaracin de la estructura.
2. Listando el tipo de estructura creada seguida por las

variables correspondientes en cualquier lugar del


programa.

(Se anexan al final algunos ejemplos de declaracin y


(Se anexan al final algunos ejemplos de declaracin y
definicin al final de la presentacin.)
definicin al final de la presentacin.)
Por Rodrigo Vsquez

Ejemplo de declaracin y definicin


Declaracin y definicin de una estructura en lenguaje C:

1. struct InfoAtleta
1. struct InfoAtleta
{
{
char nombre[40];
char nombre[40];
int edad;
int edad;
char sexo;
char sexo;
char categoria[20];
char categoria[20];
float tiempo;
float tiempo;
} Atleta1, Atleta2, Atleta3;
} Atleta1, Atleta2, Atleta3;
O bien,
O bien,
2. struct InfoAtleta Atleta1, Atleta2,
2. struct InfoAtleta Atleta1, Atleta2,
Atleta3;
Atleta3;
Por Rodrigo Vsquez

Inicializacin de una estructura


Es posible inicializar una estructura de dos formas. La
Es posible inicializar una estructura de dos formas. La
primera dentro de la seccin de cdigo del programa, y la
primera dentro de la seccin de cdigo del programa, y la
segunda como parte de la definicin.
segunda como parte de la definicin.
Ejemplo:
Ejemplo:
struct infolibro
struct infolibro
{
{
char titulo[60];
char titulo[60];
char autor[30];
char autor[30];
char editorial[30];
char editorial[30];
int anyo;
int anyo;
} Libro1 = { La investigacin , Elssy Bonilla ,
} Libro1 = { La investigacin , Elssy Bonilla ,
Alfaomega, 2009};
Alfaomega, 2009};
O
O
struct infolibro Libro1 = { La investigacin , Elssy
struct infolibro Libro1 = { La investigacin , Elssy
Bonilla , Alfaomega, 2009};

Por Rodrigo Vsquez

Acceso a los componentes de una


estructura
Se accede a una estructura para almacenar o
Se accede a una estructura para almacenar o
recuperar datos de la misma. Existen dos formas.
recuperar datos de la misma. Existen dos formas.
Utilizando el operador punto(.)
Utilizando el operador punto(.)
El operador punto proporciona el camino directo al miembro
El operador punto proporciona el camino directo al miembro
correspondiente.
correspondiente.
Ejemplo:
Ejemplo:
Asignando valores directamente.
Asignando valores directamente.
Atleta1.edad=23;
Atleta1.edad=23;
strcpy(Atleta1.nombre, Juan Hernndez );
strcpy(Atleta1.nombre, Juan Hernndez );
O bien a travs del teclado
O bien a travs del teclado
printf(Nombre del atleta:);
printf(Nombre del atleta:);
gets(Atleta1.nombre);
gets(Atleta1.nombre);
Por Rodrigo Vsquez

Acceso a los componentes de una


estructura
Es recomendable que los datos se lean en variables
Es recomendable que los datos se lean en variables
auxiliares y luego se trasladen sus valores a los
auxiliares y luego se trasladen sus valores a los
componentes de las estructuras.
componentes de las estructuras.
char nombre[40];
printf(Nombre del atleta:);
gets(nombre);
strcpy(Atleta1.nombre,
nombre);

Por Rodrigo Vsquez

Acceso a los componentes de una estructura


Utilizando el operador puntero (- > )
Utilizando el operador puntero (- > )
El operador puntero - > Sirve para acceder a los datos de la
El operador puntero - > Sirve para acceder a los datos de la
estructura a partir de un puntero. Para utilizar este operador
estructura a partir de un puntero. Para utilizar este operador
primero se debe definir una variable puntero para direccionar
primero se debe definir una variable puntero para direccionar
hacia la estructura.
hacia la estructura.
Ejemplo:
Ejemplo:
struct InfoAtleta *ptrAtleta;
struct InfoAtleta *ptrAtleta;
// Asignar la direccin de memoria de la variable Atleta1 a
// Asignar la direccin de memoria de la variable Atleta1 a
la
variable ptrAtleta.
la
variable ptrAtleta.
ptrAtleta = &Atleta1;
ptrAtleta = &Atleta1;
Asignando valores directamente.
Asignando valores directamente.
ptrAtleta- > edad=23;
ptrAtleta- > edad=23;
strcpy(ptrAtleta1- > nombre, Juan Hernndez );
strcpy(ptrAtleta1- > nombre, Juan Hernndez );
Por Rodrigo Vsquez

Acceso a los componentes de una estructura


Es recomendable que antes de acceder a los miembros de
Es recomendable que antes de acceder a los miembros de
una estructura, con una variable puntero y el operador - >, la
una estructura, con una variable puntero y el operador - >, la
estructura tenga su espacio de almacenamiento creado. o
estructura tenga su espacio de almacenamiento creado. o
bien, crear el espacio de almacenamiento en memoria con la
bien, crear el espacio de almacenamiento en memoria con la
funcin malloc().
funcin malloc().
struct InfoAuto
La definicin de la
La definicin de la
{
izquierda solicita al
izquierda solicita al
char placa[7];
sistema
operativo,
sistema
operativo,
char color[10];
mediante la funcin
mediante la funcin
int ao
malloc(), un bloque
malloc(), un bloque
char marca[10];
de
memoria
del
de
memoria
del
}
tamao en bytes
tamao en bytes
typedef InfoAuto Auto;
correspondiente a la
correspondiente a la
Auto *PtrAuto;
estructura Auto (29
estructura Auto (29
PtrAuto=(Auto*)malloc(sizeof(Au
bytes) y almacena la
bytes) y almacena la
to));
direccin del bloque
direccin del bloque
en
la
variable
en
la
variable
puntero
PtrAuto.
Por Rodrigo Vsquez
puntero PtrAuto.

Recuperacin de datos de una estructura


Se recupera informacin de una estructura utilizando el
Se recupera informacin de una estructura utilizando el
operador de asignacin o una sentencia de salida (printf ( ) ,
operador de asignacin o una sentencia de salida (printf ( ) ,
puts ( ) , . . . ) . Igual que antes, se puede emplear el operador
puts ( ) , . . . ) . Igual que antes, se puede emplear el operador
punto o el operador flecha (puntero).
punto o el operador flecha (puntero).
El formato general toma una de estas dos formas:
El formato general toma una de estas dos formas:
1. <nombre variable> = <nombre variable estructura> .
1. <nombre variable> = <nombre variable estructura> .
<nombre miembro>;
<nombre miembro>;
o bien
o bien
<nombre variable> = <puntero de estructura> ->
<nombre variable> = <puntero de estructura> ->
<nombre miembro>;
<nombre miembro>;
2. Para salida:
2. Para salida:
printf (" " , <nombre variable estructura> . <nombre
printf (" " , <nombre variable estructura> . <nombre
miembro>) ;
miembro>)
;
Por
o Rodrigo
bien Vsquez

Estructuras anidadas
Una estructura puede tener como miembro o componente a
Una estructura puede tener como miembro o componente a
otra estructura o varias dependiendo del caso. Se dice que
otra estructura o varias dependiendo del caso. Se dice que
existe un beneficio relacionado al ahorro de tiempo cuando
existe un beneficio relacionado al ahorro de tiempo cuando
los programas utilizan estructuras similares. Se define la
los programas utilizan estructuras similares. Se define la
estructura componente una vez y esta se incluye como
estructura componente una vez y esta se incluye como
componente en una o varias estructuras en un programa.
componente
struct fechaen una o varias estructuras en un programa.
{
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 Vsquez

Arreglos de estructuras
Es posible crear arreglos de estructuras. Esto implica que los
Es posible crear arreglos de estructuras. Esto implica que los
arreglos pueden almacenar diferentes tipos de datos de acuerdo al
arreglos pueden almacenar diferentes tipos de datos de acuerdo al
diseo de la estructura.
diseo de la estructura.
Los arreglos de estructuras son tiles para almacenar datos de
Los arreglos de estructuras son tiles para almacenar datos de
grupos de empleados, productos, etc.
grupos de empleados, productos, etc.
Ejemplo:
Ejemplo:
Se define un arreglo de estructuras con capacidad para
Se define un arreglo de estructuras con capacidad para
almacenar los datos de 50 atletas.
almacenar los datos de 50 atletas.
struct InfoAtleta Atletas[50];
struct InfoAtleta Atletas[50];
Representacin del arreglo de estructuras en memoria. (3350 bytes
Representacin del arreglo de estructuras en memoria. (3350 bytes
de memoria reservado)
de memoria
reservado)
nombre
edad
sexo
categori
tiempo
40 bytes
0
1

Por Rodrigo Vsquez


49

2bytes

1byte

a
20 bytes

4bytes

Arreglos de estructuras
Para acceder a los miembros de cada uno de los elementos
Para acceder a los miembros de cada uno de los elementos
estructura se utiliza una notacin de arreglo. Para inicializar el
estructura se utiliza una notacin de arreglo. Para inicializar el
primer elemento de libros, por ejemplo, su cdigo debe hacer
primer elemento de libros, por ejemplo, su cdigo debe hacer
referencia a los miembros de libros [0] de la forma siguiente:
referencia a los miembros de libros [0] de la forma siguiente:
strcpy(libros[0] .titulo, "C++ a su alcance") ;
strcpy(libros[0] .titulo, "C++ a su alcance") ;
strcpy(libros[0] .autor, "Luis Joyanes") ;
strcpy(libros[0] .autor, "Luis Joyanes") ;
strcpy(libros[0] .editorial, "McGraw-Hill") ;
strcpy(libros[0] .editorial, "McGraw-Hill") ;
libros [0] .anyo = 1999;
libros [0] .anyo = 1999;
Tambin puede inicializarse un arreglo de estructuras en el punto de
Tambin puede inicializarse un arreglo de estructuras en el punto de
la declaracin encerrando la lista de inicializadores entre llaves, { }.
la declaracin encerrando la lista de inicializadores entre llaves, { }.
Por ejemplo,
Por ejemplo,
struct infolibro libros[3] = { "C++ a su alcance", "Luis Joyanes",
struct infolibro libros[3] = { "C++ a su alcance", "Luis Joyanes",
"McGraw-Hill", 1999, "Estructura de datos", "Luis Joyanes",
"McGraw-Hill", 1999, "Estructura de datos", "Luis Joyanes",
"McGraw-Hill", 1999, "Problemas en Pascal", "ngel Hermoso",
"McGraw-Hill", 1999, "Problemas en Pascal", "ngel Hermoso",
"McGraw-Hill", 1997};
"McGraw-Hill", 1997};
Por Rodrigo Vsquez

FIN DE LA
PRESENTACION
GRACIAS

Por Rodrigo Vsquez

S-ar putea să vă placă și