Estructuras de Datos
Introducción
Proceso(Programa
)
Datos de
Entrada
Datos de
salida
El proceso computacional
• Programa: Un conjunto de instrucciones especificadas en un lenguaje de programación que definen el proceso que se efectúa sobre los datos
• Al ejecutarse el programa, se lleva a cabo un proceso computacional
• Los programas están constituidos por instrucciones que invocan a las operaciones elementales.
Ej: Operación elemental de mover un dato de un “sitio” a otro. Instrucción que la invoca: mov origen,destino
(ensamblador)
• La memoria es donde son ejecutados los programas
• Las variables:
- Son un espacio de memoria
- Almacenan un dato
- Se puede cambiar el dato que almacenan durante el trascurso del programa mediante una asignación
- Pertenecen a un tipo de dato Ver luego
• Operadores: Permiten aplicar una función predefinida por el lenguaje sobre uno o más valores de algún tipo nativo llamados operandos. Ej: +, -,*,/ etc.
• Los términos o expresiones son construcciones que permiten representar un valor Ej: 10/2
Se construyen mediante operadores.
Ejemplos en C/C++
int a; //Se declara la vble entera afloat b; //Se declara la vble real bchar sexo='m'; //Declara y asigna la vble sexo
a=5; //Se asigna a a el valor 5b=1+ 2*(4/3); //Se asigna a b el valor de una expresióna=a+ b*4; //Se asigna a a el valor de una expresión
¿Después de la última asignación cuánto vale a?
Para evitar pérdida de decimales se debe realizar: b=1+ 2* (float)4/3;
• Entrada (por teclado) y salida de datos (por pantalla):
Ej. En C:
int a;
printf("Entre un número entero");
scanf("%d",&a);
fflush(stdin);
printf("El valor de a es %d",a);
Nota: scanf tiene otros problemas aparte del manejo del buffer…
• También por medio de cout y cin (C++):
int a;
cout << "Entre un número entero";
cin >> a;
cout << "El valor de a es" << a;
Estructuras de Control de flujo
• Decisión:
if(condición){
//Código del if}else{
//Código del else}
Puede haber if’s anidados…
switch (expresión*){case constante1: bloque de código; break;case constante2: bloque de código; break;default: bloque de código;}
*Entera o un (sólo uno) carácter •El uso de break es opcional en el default
• Iteración:• Ciclo for:
for(int vble=valor; condición;vble+incremento){ //Código dentro del ciclo}
• Ciclo while:while(condición){
//Código del ciclo}
•Ciclo do while:
do{
//Código del ciclo
} while(condición);
Funciones: Son agrupaciones de instrucciones que llevan a cabo una tarea específica. Declaración:tipo_de_vble_de_retorno nombre_funcion ( tipo_arg_1 nombre_arg_1, ... , tipo_arg_n nombre_arg_n){
/*Código de la función*/return nombre_variable_retorno;
}
Debe ser del mismo tipoque tipo_de_vble_de_retorno
• Un tipo de datos es un conjunto de elementos con características comunes, sobre los cuales se definen determinadas operaciones.
• Consta de dos partes:
- Un conjunto de valores
- Un conjunto de operaciones sobre dichos valores
• Al conjunto de valores que incluye un tipo de dato se le conoce como dominio o rango
• Tipos de datos nativosLos tipos de datos nativos son aquellos ofrecidos por un lenguaje de programación.Ej: En C/C++:
Tipo Operaciones:int suma, resta, producto etc.double suma, resta, producto etc.char concatenar, longitud, etc.
Por ejemplo el rango de int es -32768 a 32767
Tipos de datos definidos por el usuario:• Simples: A través de typedef:
Ej:
typedef int edad; //Define el tipo de dato
edad miedad = 14; //Vble de tipo edad
• “Complejos”: Las clases Énfasis en Curso de Objetos
Los tipos de datos también se pueden clasificar así:• Tipos de datos EscalaresSon aquellos tipos de datos cuyos miembros están compuestos por un solo ítem (dato). Ej: int, float,char etc.
• Tipos de datos AgregadosSon aquellos que están compuestos por más de un elemento de información (dato), a cada uno de estos elementos se les conoce como miembros o componentes. Ejemplo: Las estructuras y uniones en C/C++
• Estructuras: Las estructuras son tipos de datos compuestos formados por varios datos llamados campos o miembros, cada uno de los cuales posee su propio espacio en memoria.
• Pueden incluso haber estructuras dentro de estructuras Ver ejemplo luego
• Para declarar una estructura en C++ se utiliza la siguiente sintaxis:
struct nombre_de_estructura
{
Campos de la estructura;
};
struct estudiante {
char nombre[20];char apellido[20];float nota;int id;
}; …struct estudiante pedro; // Vble de tipo estructura
// estudiante
• También es posible:
struct estudiante
{
char nombre[20];
char apellido[20];
float nota;
int id;
} juan, luisa; //Declara la estructura y 2 vbles
• También se puede aplicar typedef:struct estudiante{
char nombre[20];char apellido[20];float nota;int id;
};typedef struct estudiante alumno;alumno est1,est2, estaux; //Vbles de tipo alumno (es decir estructuras estudiante)
• Para acceder a cada uno de los campos de la estructura se utiliza:
vbleEstructura.campo
Ej:juan.nota=4.0;cin>> juan.nombre;cout<<juan.nombre<<" "<<juan.nota;
• Definición: Un elemento estándar (stdelement) es un tipo de dato que tiene como característica distintiva un campo llamado clave que lo diferencia de todos los demás elementos de su tipo y lo hace único. Ejemplo: un campo cédula en una estructura persona.
• Estos elementos son los más usados al definir tipos de datos para crear estructuras de datos con ellos y próximamente serán vistos.
• Uniones: Son similares a las estructuras, la diferencia es que los campos comparten el mismo espacio de memoria.
union nombre_de_union
{
Campos de la union;
};
union persona {
char nombre[20];char inicial;
} p;cin>> p.nombre;//Suponga se ingresa Pedro, entonces: cout << p.inicial; //Imprime ‘P’./*¿Si en vez de inicial hubiese un campo declarado también de 20 caracteres que saldría? */
#include <iostream.h>union prueba{ int a; int b; int c;}p;
void main (void){ p.a=10; cout << p.a << p.b << p.c;}
Imprime 101010
#include <iostream.h>union prueba{ int a; float b; char c;}p;
void main (void){ p.a=8; cout << p.a; // Imprime 8 cout << p.b; // Valor inesperado cout << p.c; // Valor Inesperado}
Imprime 81.2104e-04
• Arreglos o Vectores: Son un conjunto de posiciones adyacentes de memoria para almacenar datos del mismo tipo que tienen el mismo nombre y se diferencian en el índice.
• Para declarar un arreglo en C++ se utiliza la sintaxis:
tipo_de_dato nombre_arreglo [dimension];
• Los índices van desde 0 hasta dimension-1.
int arreglo[10];
arreglo[3]=50;
//Asigna el valor 50 al 4to elemento del arreglo
cout<<"El cuarto elemento es"<<arreglo[3];
• Se pueden también definir por ejemplo vectores de estructuras Luego se verán…
Clases:• Énfasis en el curso de Objetos (herencia, sobrecarga de
operadores etc.)• Son similares a las estructurasPara definir una clase en C++ se utiliza la siguiente sintaxis:
class nombre_de_clase {
private:Campos_de_la_clase;
public:Constructor;Declaración_de_funciones;
};
Ejemplo: Especificación de una clase punto:
#include <iostream.h>class punto{
private:int color;int coordenada_x;int coordenada_y;
public:punto(int color, int X, int Y); //Constructorvoid cambiar_color(int nuevo_color);int consultar_color();
};
Implementación de las funciones:
punto::punto(int color1, int X, int Y){ color=color1; coordenada_x=X; coordenada_y=Y;}
void punto::cambiar_color(int nuevo_color){ color=nuevo_color;}
int punto::consultar_color(){ return color;}
Constructor
• Declararación de una variable (objeto) de tipo punto e invocación de sus funciones (métodos):
void main(void){ punto alpha( 23, 100, 80 ); cout << alpha.consultar_color(); alpha.cambiar_color( 50 ); cout << alpha.consultar_color();}