implementaciónde eds
DESCRIPTION
Como implementar estructuras de datosTRANSCRIPT
![Page 1: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/1.jpg)
Estructuras de Datos y Algoritmos
! Docente: M.Sc. Carlo Corrales Delgado [email protected]
! https://sites.google.com/site/unsaepiseda o simplemente /episeda.tk
Universidad Nacional de San Agustín Escuela Profesional de Ingeniería de Sistemas III Semestre
![Page 2: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/2.jpg)
Introducción
![Page 3: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/3.jpg)
Cómo enseñar el Diseño de Estructuras de Datos
! Desde el GOTO, Programación estructurada, POO, Tipos de datos abstractos, Templates, etc.
! Clasificación de acuerdo a: - Dinamicidad: vectores estáticos o dinámicos - Protección de datos: Acceso libre, parcial o
totalmente protegido - Encapsulación: namespaces, struct, classes,
interfaces o funciones variables. - Abstracción de datos: técnicas inflexibles o
flexibles (en t ejec y en t compilac).
![Page 4: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/4.jpg)
Cómo enseñar el Diseño de Estructuras de Datos
! Alternativas de implementación: ! Vectores de tamaño fíjo ! Vectores dinámicos y variables globales ! Programación modular ! Programación Orientada a Objetos ! Tipos de Datos abstractos ! Diseño de patrones ! Código para proyectos grupales ! NameSpaces ! Definición de tipos de datos en tiempo de
ejecución ! Punteros para reducir códigos ! Interfaces ! Software tolerante a fallas
![Page 5: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/5.jpg)
! La meta es almacenar elementos de tipo entero ! Usar un vector fijo y un contador global
![Page 6: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/6.jpg)
! Estructura más flexible ! Usa un puntero
![Page 7: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/7.jpg)
! Solo se maneja 1 vector por programa (var global)
![Page 8: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/8.jpg)
! Para la coexistencia de más de 1 vector en el sistema
![Page 9: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/9.jpg)
! Si necesitamos n parámetros, usaremos estructuras
![Page 10: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/10.jpg)
! Si queremos proteger los datos: encapsulamiento
![Page 11: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/11.jpg)
! Pero, y si queremos un vector entero, otro doble, etc??
![Page 12: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/12.jpg)
! Cuando el tipo de elementos a insertar no es específico
![Page 13: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/13.jpg)
! Pero no sería usual si necesitamos 2 vectores de diferentes tipos (repetiríamos código): templates
![Page 14: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/14.jpg)
! Observe que se debe definir el tipo en t compilación.
![Page 15: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/15.jpg)
! Alto nivel de abstracción ! Mecanismo para ejecutar operaciones sobre los
datos que contiene: iterators (STL)
![Page 16: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/16.jpg)
! Técnica: Objetos de Función (sin punteros)
![Page 17: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/17.jpg)
! Si 2 programadores implementan un árbol binario y una lista enlazada por separado; usarán un NODE
![Page 18: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/18.jpg)
! NODE es de uso interno.
![Page 19: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/19.jpg)
! NODE es de uso interno.
![Page 20: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/20.jpg)
! Si diseñamos un Excel y un Word: métodos y DLLs
![Page 21: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/21.jpg)
! Al extraer clases y métodos con #import, muchos se repiten
![Page 22: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/22.jpg)
! Nuevo nivel de encapsulación ! No se pueden crear instancias en un namespace
![Page 23: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/23.jpg)
! Motores de BD generan runtime ED. ! Primer solución: switch
![Page 24: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/24.jpg)
! Problemas con los ifs
![Page 25: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/25.jpg)
! Sin templates, usando un punteros a funciones
![Page 26: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/26.jpg)
! Función para comparar 2 valores
![Page 27: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/27.jpg)
! Función para comparar 2 valores
![Page 28: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/28.jpg)
! Si deseamos acceder a diferentes BD, con ODBC se necesita drivers con operaciones de insertar, borrar, actualizar, etc.
![Page 29: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/29.jpg)
! El nuevo productor debe añadir sus drivers a ODBC usando su propia piscina
! Toda la complejidad es escondida por ODBC y es transparente para el usuario final
![Page 30: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/30.jpg)
! Veamos el llamado a funciones sin punteros
![Page 31: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/31.jpg)
! Ahora con punteros: reducción de código y escalabilidad
![Page 32: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/32.jpg)
! Al pensar en la implementación de Cvector, tenemos dos grupos de métodos: - Insert(), Remove() - Write(), Read()
! Tienen relación semántica? ! ATL implementan distintas interfaces
![Page 33: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/33.jpg)
! Medidas para que errores que puedan pasar sean controlados. Ej.
![Page 34: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/34.jpg)
! Factorial → -1, pero Division → ??
![Page 35: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/35.jpg)
Consideraciones de lenguajes de programación
! Lenguajes de programación: - C++: punteros - Java: aplicaciones web, estricto chequeo de tipos
! Consideremos STL, ATL, Boost
![Page 36: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/36.jpg)
" La calidad de los algoritmos usados:
! Fibonacci
![Page 37: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/37.jpg)
" La calidad de los algoritmos usados:
! Fibonacci
![Page 38: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/38.jpg)
Ayuda del Compilador
! Búsqueda binaria
![Page 39: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/39.jpg)
Ayuda del Compilador ! Compilador GNU C
![Page 40: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/40.jpg)
Ayuda del Compilador ! Función Factorial: función recursiva se
transforma en recursiva cortada, donde fácilmente un compilador lo vuelve iterativa.
![Page 41: Implementaciónde EDs](https://reader034.vdocuments.net/reader034/viewer/2022050910/5695cfc91a28ab9b028f87e1/html5/thumbnails/41.jpg)
Comentarios finales
! Uso de threads ! Documentación