1 / 19

Estructura de Datos En C++

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.

masako
Download Presentation

Estructura de Datos En C++

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Estructura de Datos En C++ Dr. Romeo SánchezNigenda. 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. Website: http://yalma.fime.uanl.mx/~romeo/ED/2011/ Sesiones: 48 * Slides aumentados con información de Dr Roger Ríos.

  2. Objetivo General: Conocerá y manejará las estructuras internas de información Temario: • Conceptos Básicos • La Pila • Colas • Recursión • Listas • Árboles • Ordenamiento • Búsqueda • Administración de Almacenamiento Total a calificar: 110 puntos. 40% Tareas 30% Examen Parcial 30% Examen Final 10% Participación

  3. Material de apoyo: Estructura de Datos con C y C++. YedidyahLangsam, Moshe J. Augenstein, Aaron M. Tenenbaum, Brooklyn College SegundaEdición, Prentice-Hall. Algorithms. ThirdEdition. Parts 1-4, Fundamentals Data StructuresSortingSearching Robert Sedgewick. Estructura de Datos. Román Martínez, Elda Quiroga. ThomsonLearning. Cualquier libro de Estructura de Datos! Software: Compiladores GCC (GNU CompilerCollection) IDEs (IntegratedDevelopmentEnvironment): http://www.eclipse.org/downloads/ http://kdevelop.org/ http://www.bloodshed.net/devcpp.html

  4. 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

  5. Arreglos • Definiciones • 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;

  6. Arreglos • Declaració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’};

  7. Arreglos • 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;

  8. Arreglos • 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

  9. Arreglos Multidimensionales • Por dimensión entendemos como el número de índices utilizados para referirse a un elemento particular en el arreglo. • Bidimensional: TypeArrayName[numFilas][numColumnas] Ejemplo: intmiarray[3][5]; En memoria Fila 0 Fila 1 Fila 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;

  10. Arreglos Multidimensionales • A través de punteros: intmiarray[3][5] int *p = *myarray; for(intfila=0;fila<3;fila++) for(intcol=0;col<5;col++) *(p + 5*fila + col) = 0; int (*nn)[5] = ia; for (intpn=0;pn<15;pn++){ cout<<"ia: "<<*(*nn+pn)<<endl; } int *myp = *ia; for (intpn=0;pn<15;pn++){ cout<<"ia: "<<*(myp+pn)<<endl; }

  11. 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: structtype-name{elementos};

  12. Registros (estructuras) en C/C++ • Ejemplo: struct { char sexo; char primernombre[10]; char apellido[15]; } minombre; • La definición crea una variable minombrede 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

  13. Registros (estructuras) en C/C++ • Podemos usar etiquetas, y declarar variables usando la etiqueta: structtiponombre{ char sexo; charprimernombre[10]; char apellido[30]; }; structtiponombreminombre, tunombre; typedefstruct{ char sexo; charprimernombre[10]; char apellido[30]; } TIPONOMBRE; TIPONOMBRE minombre, tunombre;

  14. Registros (estructuras) en C/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 arreglo for (int i=0;i<30;i++) tunombre.apellido[i] = minombre.apellido[i] ;

  15. Registros (estructuras) en C/C++ • Puede declararse que un elemento de una estructura sea otra estructura: typedefstruct{ char calle[30]; intnum; char ciudad [10]; char estado [3]; charcpostal [6]; } TIPODIRECCION; typedefstruct{ TIPONOMBRE alumnonombre; TIPODIRECCION alumnodireccion; } TIPOALUMNO; TIPOALUMNO alumno_x; Como accesar al valor de calle a través de la variable alumno_x?

  16. Registros (estructuras) en C/C++ • Ejemplos main(){ structtiponombre x; //x es una instancia de tiponombre structtiponombre* y; //y es un puntero a una instancia de tiponombre x.sexo = ‘M’; y = &x; //y apunta a la dirección de la estructura x y ->sexo = ‘f’; //Igual a x.sexo = ‘f’; } Como implementaria un conjunto de estructuras? structtiponombre nombres[5]; TIPONOMBRE nombres[5]; typedefstruct{ TIPOALUMNO alumno; RECORDS * palumno; } RECORDS;

  17. Uniones • La Unionpermite que una variable se interprete de formas distintas #define VIDA 1 #define AUTO 2 #define CASA 3 structaddr{ intnum; char calle[30]; …; } struct seguro{ intsegnumero; char nombre[50]; structaddrdireccion; int cantidad; floatpremium; int clase; union{ struct{ char beneficiario [50]; } vida; struct{ int deducible; char licencia [20]; char modelo[20]; int año; } auto; struct{ intdeduciblecasa; int añoconstruccion; } casa; } seguroinfo; }

  18. Uniones • 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; else cout<<“Opción no válida!”; • Entonces un arreglo declarado como: struct seguro [100]; podríacontenertiposdiferentes de segurosduranteejecución.

  19. Estructuras como parámetros • Por referencia . . . struct seguro poliza; imprime_poliza(&poliza); voidimprime_poliza(struct seguro * mipoliza){ cout<<“Número de Póliza: <<mipoliza->numseguro; …. if(mipoliza->clase == VIDA){ cout<<mipoliza->seguroinfo.vida.beneficiario; } … }

More Related