Clase No.7 (Estructura de Datos)

Anuncio
Algoritmos
Fundamentales
Estructura de Datos
Estructuras
Estructura
Colección de uno o más tipos de elementos, los
cuales pueden ser de tipos de datos diferentes.
Declaración.
usada.
Debe ser declarada antes de ser
struct <nombre de la estructura>
{
<tipo
de
dato
miembro1>
miembro1>;
<tipo
de
dato
miembro2>
miembro2>;
......
<tipo
de
dato
miembron>
<nombre
<nombre
<nombre
Estructuras
Definición (variables tipo struct)
Al igual que otras variables, las estructuras deben
ser definidas luego de ser declaradas para poder ser
usadas.
Hay dos formas de definir.
1. Listándolas inmediatamente después de las llaves
de
declaración.
struct info_libros
{ char titulo[60];
char autor[30];
char editorial[30];
int anyo;
} libro1,libro2,libro3;
Estructuras
2. Listándo el tipo de la estructura creada seguida por
las variables correspondientes, en cualquier parte
del programa, antes de ser usadas.
struct info_libros
{ char titulo[60];
char autor[30];
char editorial[30];
int anyo;
};
struct info_libros libro1,libro2,libro3;
Estructuras
Declaración con typedef.
A través de ésta
instrucción podemos definir un tipo de dato
equivalente a uno ya existente. Es valido para
cualquier tipo de datos, no sólo para el tipo de datos
estructura.
Sintaxis:
typedef tipo nuevo-tipo;
donde: tipo: se refiere al tipo de datos ya existente.
nuevo-tipo: nuevo dato creado a partir del
tipo ya existente.
En el caso
typedef struct <nombre de la estructura>
de estructura
{
<tipo de dato miembro1> <nombre
miembro1>;
<tipo de dato miembro2> <nombre
miembro2>;
......
<tipo de dato miembro > <nombre
Estructuras
2. Ej con typedef:
typedef struct
{ char titulo[60];
char autor[30];
char editorial[30];
int anyo;
} info_libros;
Se mueve el nombre de la
estructura después de las
llaves, ahora es un tipo
de datos. En este caso
Llamado info_libros.
info_libros libro1,libro2,libro3;
Eliminamos la palabra struct al inicio.
Estructuras
Inicialización
Podemos asignar valores iniciales a una estructura al
definirlas o dentro del programa(asignar valores).
1. Asignación:
libro3=libro1; libro4=libro1;
libro3=libro3=libro4=libro1;
Estructuras
2. Inicialización:
struct info_libros
{ char titulo[60];
char autor[30];
char editorial[30];
int anyo;
} libro1={“Programacion en C”,”Luis Joyanes”,
”McGraw Hill”,2000};
ó libro1={ “Programacion en C”,
”Luis Joyanes”,
”McGraw Hill”,
2000 };
Estructuras
Asignación de Valores.
Acceso a una estructura a través del Operador
punto(.),
este operados nos da acceso directo al miembro
correspondiente.
SINTAXIS:
Para datos numéricos ó caracter:
<nombre estructura>.<nombre miembro>=dato;
Para cadena de datos :
Ej. strcpy(libro1.autor,“Papo Lucas”);
Estructuras
Ejemplo:
struct info_libros libro5;
printf(“\n Digite titulo:”);
gets(libro5.titulo);
printf(“\n Digite Autor:”);
gets(libro5.autor);
printf(“\n Digite Editorial:”);
gets(libro5.editorial);
printf(“\n Digite año:”);
scanf(“%d”,&libro5.anyo);
Estructuras
Acceso a través del operador puntero ()
Primero debe definirse una variable tipo puntero para
apuntar a la estructura. Luego podemos apuntar
directamente al miembro dado.
SINTAXIS:
<puntero
a
estructura>
miembro>=dato;

<nombre
Estructuras
struct estudiantes
{ char nombre[41];
int num_estudiante;
int anyo_de_matricula;
float nota;
};
struct estudiantes *ptr_est;
struct estudiantes mejor;
Nota: Antes de acceder, debemos haber reservado
memoria, a través p.e. de la función malloc().
ptr_est = &mejor;
strcpy(ptr_estnombre,”Pepe Trueno”);
ptr_estnum_estudiante = 4322;
ptr_estnota =8.5;
Estructuras
Arreglos de Estructuras
Permiten almacenar diversos valores de diferentes
tipos
de datos. Son prácticos para almacenar archivos de
empleados, inventarios y otros datos que se adapten al
formato de estructura.
Declaración Arreglos de Estructuras
struct info_libros libros[100];
Acceso e inicialización
strcpy(libros[0].titulo,”C++ a su alcance”);
strcpy(libros[0].autor,”Luis Joyanes”);
strcpy(libros[0].editorial,”Mc GrawHill”);
libros[0].anyo = 1999;
Estructuras
Declaración e inicialización
struct info_libro libro[3] = {“Programación en C”,”Luis Joyanes”,
”McGraw Hill”,1999, “Estructura de Datos”,”Luis Joyanes”,
”McGraw Hill”,1999, “C++ a su Alcance”,”Luis Joyanes”,
”McGraw Hill”,2000 };
Estructuras
Paso de Estructura a una Función
En una función se pueden pasar como
parámetros los miembros de una estructura, ya
sea de forma individual o la estructura
completa.
Así también un miembro de una estructura
puede ser devuelto en un instrucción return,
en ese caso el miembro se trata de forma
individual.
Estructuras
El siguiente programa hace el uso pase de parámetros
de tipo estructura en una función. Se hacen los pase
por
valor y referencia.
Se tienen dos funciones una para la entrada de datos y
Se pasan los parámetros por referencia o dirección en
memoria(tipo *).
La segunda función se usa para la salida de datos y la
Estructura se pasa como parámetro por valor.
Estructuras
#include <stdio.h>
#include <stdlib.h>
/*definir la estructura */
struct info_persona
{
char nombre[20];
char calle[20];
char ciudad[20];
char provincia[20];
char codigopostal[6];
};
Estructuras
/* prototipo de funciones: definicion de las funciones */
void entrada( struct info_persona *pp);
void salida( struct info_persona p);
main()
{
struct info_persona reg_dat;
entrada(&reg_dat); // pase por referencia
salida(reg_dat); // pase por valor
printf("\n Pulsar cualquier techa para continuar \n");
getchar();
}
Estructuras
void entrada( struct info_persona *pp)
{
puts("\n Entrada de Datos de la persona \n");
printf("\n Nombre: ");
gets(pp->nombre);
printf("\n Calle: ");
gets(pp->calle);
printf("\n Ciudad: ");
gets(pp->ciudad);
printf("\n Provincia: ");
gets(pp->provincia);
printf("\n Codigo Postal: "); gets(pp->codigopostal);
}
Estructuras
void salida( struct info_persona p)
{
puts("\n\n Informacion digitada de la persona \n");
puts(p.nombre);
puts(p.calle);
puts(p.ciudad);
puts(p.provincia);
puts(p.codigopostal);
}
Estructuras Anidadas
Estructura Anidadas
Es cuando una estructura contiene a una o mas
estructuras como miembro de ella.
Ej.
struct info_dir
{ char direccion[30];
char ciudad[20];
char provincia[20];
int cod_postal;
};
Estructuras Anidadas
Ej.
struct info_dir
{ char direccion[30];
char ciudad[20];
char provincia[20];
int cod_postal;
};
struct empleado
{ char nombre_emp[30];
struct info_dir direccion_emp;
double salario;
};
struct clientes
{ char nombre_cli[30];
struct info_dir direccion_cli;
double saldo;
};
Estructuras Anidadas
Se desea una estructura PersonaEmpleado
que contenga como miembros los datos de una persona que a su vez
tenga
los datos de la fecha de nacimiento.
#include <stdio.h>
#include <stdlib.h>
/* definir las estructuras */
struct fecha
{
unsigned int dia,mes,anyo;
};
struct persona
{
char nombre[20];
unsigned int edad;
int altura;
int peso;
struct fecha fec;
Estructuras Anidadas
struct persona_empleado
{
struct persona unapersona;
unsigned int salario;
unsigned int horas_semana;
};
/* prototipo de funciones: definicion de las funciones */
void entrada(struct persona_empleado *pp);
void salida(struct persona_empleado up);
main()
{ struct persona_empleado pp; // definir una variable pp
entrada(&pp); // entrada de los datos
salida(pp);
// Salida de los datos
printf("\n\n\n Pulsar cualquier tecla para continuar \n");
getchar();
}
Estructuras Anidadas
void entrada( struct persona_empleado *pp)
{
fflush(stdin);
puts("\n Entrada de Datos de la persona \n");
printf("\n Nombre: ");
printf("\n Edad: ");
printf("\n Altura: ");
printf("\n Peso: ");
gets(pp->unapersona.nombre);
scanf("%d",&pp->unapersona.edad);
scanf("%d",&pp->unapersona.altura);
scanf("%d",&pp->unapersona.peso);
printf("\n\n Fecha de Nacimiento(dia,mes,anyo) separado por espacio ");
scanf("%d %d %d",&pp->unapersona.fec.dia,&pp->unapersona.fec.mes,
&pp->unapersona.fec.anyo);
printf("\n\n Salario: "); scanf("%d",&pp->salario);
printf("\n Numero de Horas: "); scanf("%d",&pp->horas_semana);
}
Estructuras Anidadas
void salida( struct persona_empleado up)
{
puts("\n\n Datos de un Empleado \n");
printf("\n Nombre: %s ",up.unapersona.nombre);
printf("\n Edad: %d ",up.unapersona.edad);
printf("\n Fecha de Nacimiento: %d-%d-%d ",up.unapersona.fec.dia,
up.unapersona.fec.mes,
up.unapersona.fec.anyo);
printf("\n Altura: %d ",up.unapersona.altura);
printf("\n Peso: %d ",up.unapersona.peso);
printf("\n Horas de la Sem: %d ",up.horas_semana);
}
Descargar