Estructura de Datos En C++

19
Estructura de Datos En C++ Dr. Romeo Sánchez Nigenda. E-mail: [email protected] http: //yalma.fime.uanl.mx/~ romeo / Oficina: 1er. Piso del CIDET. Oficina con Dr. Oscar Chacón Horas de Tutoría: 10am-11am Martes y Jueves, 3:30pm-4:30pm Miércoles, 2:00pm-4:00pm Viernes. Website: http://yalma.fime.uanl.mx/~romeo/ED/2011/ Sesiones: 48 * Slides aumentados con información de Dr Roger Ríos.

description

Estructura de Datos En C++. Dr. Romeo S ánchez Nigenda . E-mail: romeo.sanchez @ gmail.com http: //yalma.fime.uanl.mx/~ romeo / Oficina: 1er. Piso del CIDET. Oficina con Dr. Oscar Chacón Horas de Tutoría: 10am-11am Martes y Jueves, 3:30pm-4:30pm Miércoles, 2:00pm-4:00pm Viernes. - PowerPoint PPT Presentation

Transcript of Estructura de Datos En C++

Page 1: Estructura de Datos En C++

Estructura de Datos En C++

Dr. Romeo Sánchez Nigenda.E-mail: [email protected]://yalma.fime.uanl.mx/~romeo/Oficina: 1er. Piso del CIDET. Oficina con Dr. Oscar ChacónHoras de Tutoría: 10am-11am Martes y Jueves, 3:30pm-4:30pm Miércoles, 2:00pm-4:00pm Viernes.

Website: http://yalma.fime.uanl.mx/~romeo/ED/2011/Sesiones: 48

* Slides aumentados con información de Dr Roger Ríos.

Page 2: Estructura de Datos En C++

Objetivo General: Conocerá y manejará las estructuras internas de información

Temario:

1. Conceptos Básicos2. La Pila3. Colas4. Recursión5. Listas6. Árboles7. Ordenamiento8. Búsqueda9. Administración de Almacenamiento

Total a calificar: 110 puntos.

40% Tareas30% Examen Parcial30% Examen Final10% Participación

Page 3: Estructura de Datos En C++

Material de apoyo:Estructura de Datos con C y C++. Yedidyah Langsam, Moshe J. Augenstein, Aaron M. Tenenbaum, Brooklyn CollegeSegunda Edición, Prentice-Hall.

Algorithms. Third Edition.Parts 1-4, Fundamentals Data Structures Sorting SearchingRobert Sedgewick.

Estructura de Datos. Román Martínez, Elda Quiroga.Thomson Learning.

Cualquier libro de Estructura de Datos!

Software:Compiladores GCC (GNU Compiler Collection)

IDEs (Integrated Development Environment):http://www.eclipse.org/downloads/http://kdevelop.org/ http://www.bloodshed.net/devcpp.html

Page 4: Estructura de Datos En C++

1. Conceptos Básicos

Objetivo: Se conocerá el concepto de las estructuras de datos, como se almacena la información, y las estructuras de datos fundamentales utilizadas en la computadora.

Temario: ◦ Definición del término Estructura de Datos.◦ Definición y especificación lógica de un TDA◦ Arreglos◦ Registros◦ Conjuntos

Page 5: Estructura de Datos En C++

ArreglosDefiniciones

◦ Unidimensional: Conjunto finito y ordenado de elementos homogéneos

◦ Elementos de igual tamaño almacenados linealmente en posiciones de memoria consecutivas

El nombre del arreglo es visto como un puntero al primer elemento del arreglo

Operaciones Básicas◦ Extracción: Función que toma un arreglo a y un

índice i, y retorna un elemento del arreglo: int x = a[i];

◦ Almacenamiento: Acepta un arreglo a, un índice i, y un elemento x, y asigna a[i] = x;

Page 6: Estructura de Datos En C++

ArreglosDeclaración

◦ Tipo NombreArray [NúmeroElementos]◦ Ejemplos:

float salarios[5]; char alfabet[30]; [0] [1] [2] [3]

[4]

Inicialización◦ Por defecto: Cuando son creados, se aplica solamente

a arreglos globales y estáticos◦ Explícita: Cuando son creados, suministrando datos de

iniciación◦ En ejecución: Durante ejecución, cuando se asignan o

copian datos al arreglo.◦ Ejemplos

double scores[5] = {5.5, 6.7, 9.8, 10.0, 8.7}; int estado[3] = {-1, 0, 1}; char alfabeto[] = {‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘\0’}; char vocales[10] = {‘a’, ’e’, ‘i’, ‘o’, ‘u’,’\0’};

Page 7: Estructura de Datos En C++

El nombre del arreglo es la dirección de su primer elemento Ejemplos:

int v[50];

int *p;

p = v; // Equivalente a p = &v[0];

*p = 5; // Equivalente a v[0] = 5;

p = p + 5; // Equivalente a p = &v[5];

*p = 9; // Equivalente a v[5] = 9;

Arreglos

double x[40];int i;

for (i = 0; i < 40; i++) x[i] = 1.0;

for (i = 0; i < 40; i++) *(x + i) = 1.0;

double *p, x[40];int i;

p = x;for (i = 0; i < 40; i++) p[i] = 1.0;

for (i = 0; i < 40; i++) *(p + i) = 1.0;

for (i = 0; i < 40; i++, p++) *p = 1.0;

Page 8: Estructura de Datos En C++

No existen Strings en C, es solamente un arreglo de caracteres

Ejemplo:Char *p = “ejemplo”; La variable puntero p obtiene la dirección del primer

elemento en el arreglo (e). El compilador coloca un carácter null al final del arreglo

Arreglos

int string_length(char* x) { int l = 0; if (!x) return 0;

while (*x != 0) { x++; l++; }

return l;}

int string_length(char* x) { int l = 0; if (!x) return 0;

while (*(x++)) l++;

return l;}

Page 9: Estructura de Datos En C++

Arreglos Multidimensionales Por dimensión entendemos como el número de índices

utilizados para referirse a un elemento particular en el arreglo.

Bidimensional: Type ArrayName[numFilas][numColumnas]

Ejemplo:

int miarray[3][5];Column

a0

Columna1

Columna2

Columna3

Columna4

Fila 0Fila 1Fila 2

miarray[1][2]

Inicializamos el array:int fila, columna;for(fila = 0; fila < numFilas; fila++) for(columna = 0; columna<numColumnas; columna++)

miarray[fila][columna] = 0;

[0][0]

[0][1]

[0][2]

[0][3]

[0][4]

[1][0]

[1][1]

[1][2]

[Filas-1][Cols-1]

En memoria

Page 10: Estructura de Datos En C++

A través de punteros:

Arreglos Multidimensionales

[0][0]

[0][1]

[0][2]

[0][3]

[0][4]

[1][0]

[1][1]

[1][2]

[Filas-1][Cols-1]

int miarray[3][5]

int *p = *myarray;for(int fila=0;fila<3;fila++) for(int col=0;col<5;col++)

*(p + 5*fila + col) = 0;

int (*nn)[5] = ia;for (int pn=0;pn<15;pn++){ cout<<"ia: "<<*(*nn+pn)<<endl;}

int *myp = *ia;for (int pn=0;pn<15;pn++){ cout<<"ia: "<<*(myp+pn)<<endl;}

Page 11: Estructura de Datos En C++

Registros (estructuras) en C/C++Un registro o estructura es un grupo de

componentes en el cual cada componente tiene su propio identificador, cada uno de los cuales se conoce como un elemento (campo) de la estructura

Es un grupo de variables (elementos) que pueden ser de diversos tipos sostenidas agrupadas en una sola unidad. La unidad es la estructura.

Definición general:struct type-name {elementos};

Page 12: Estructura de Datos En C++

Ejemplo:struct {

char sexo;char primernombre[10];char apellido[15];

} minombre;

La definición crea una variable minombre de tipo estructura con 3 campos

La definición por sí misma no genera asignación de memoria, ésta se da únicamente cuando variables del tipo de la estructura son instanciadas

Registros (estructuras) en C/C++

Page 13: Estructura de Datos En C++

Podemos usar etiquetas, y declarar variables usando la etiqueta:

struct tiponombre{char sexo;char primernombre[10];char apellido[30];

};struct tiponombre minombre, tunombre;

typedef struct{ char sexo;char primernombre[10];char apellido[30];

} TIPONOMBRE;TIPONOMBRE minombre, tunombre;

Registros (estructuras) en C/C++

Page 14: Estructura de Datos En C++

Para acceder a los elementos de una estructura, usamos la variable y el nombre del elemento separados por el operador de punto:

cout<<“Apellido: “<<minombre.apellido;

Para almacenar valores:minombre.sexo = ‘M’;

//Usamos índices en elementos arreglofor (int i=0;i<30;i++)

tunombre.apellido[i] = minombre.apellido[i] ;

Registros (estructuras) en C/C++

Page 15: Estructura de Datos En C++

Puede declararse que un elemento de una estructura sea otra estructura:

typedef struct{ char calle[30];

int num;char ciudad [10];char estado [3];char cpostal [6];

} TIPODIRECCION;

typedef struct{TIPONOMBRE alumnonombre;TIPODIRECCION alumnodireccion;

} TIPOALUMNO;

TIPOALUMNO alumno_x;

Como accesar al valor de calle a través de la variable alumno_x?

Registros (estructuras) en C/C++

Page 16: Estructura de Datos En C++

Ejemplosmain(){

struct tiponombre x; //x es una instancia de tiponombrestruct tiponombre* y; //y es un puntero a una instancia de tiponombrex.sexo = ‘M’;y = &x; //y apunta a la dirección de la estructura xy ->sexo = ‘f’; //Igual a x.sexo = ‘f’;

}

Como implementaria un conjunto de estructuras?struct tiponombre nombres[5];TIPONOMBRE nombres[5];typedef struct{

TIPOALUMNO alumno; RECORDS * palumno;

} RECORDS;

Registros (estructuras) en C/C++

Page 17: Estructura de Datos En C++

UnionesLa Union permite que una

variable se interprete de formas distintas

#define VIDA 1#define AUTO 2#define CASA 3struct addr{

int num;char calle[30];…;

}struct seguro{

int segnumero;char nombre[50];struct addr direccion;int cantidad;float premium;int clase;

union{ struct{

char beneficiario [50]; } vida; struct{

int deducible;char licencia [20];char modelo[20];int año;

} auto; struct{

int deduciblecasa;int añoconstruccion;

} casa;} seguroinfo;}

Page 18: Estructura de Datos En C++

Válido referirse a los elementos comunes de la estructura:

struct seguro p; p.segnumero;

Los elementos de la Union dependerán de la lógica de programación

If (p.clase == VIDA)cout<<“Beneficiario: <<p.seguroinfo.vida.beneficiario;

else if (p.clase == AUTO)cout<<“Licencia: <<p.seguroinfo.auto.licencia;

else if (p.clase == CASA)cout<<“Deducible: <<p.seguroinfo.casa.deduciblecasa;

elsecout<<“Opción no válida!”;

◦ Entonces un arreglo declarado como: struct seguro [100]; podría contener tipos diferentes de seguros durante ejecución.

Uniones

Page 19: Estructura de Datos En C++

Estructuras como parámetrosPor referencia

. . .struct seguro poliza;

imprime_poliza(&poliza);

void imprime_poliza(struct seguro * mipoliza){cout<<“Número de Póliza: <<mipoliza-

>numseguro;….if(mipoliza->clase == VIDA){

cout<<mipoliza->seguroinfo.vida.beneficiario;

}…

}