Estructuras de Datos Dinámicas MC Beatriz Beltrán Martínez Primavera 2018
Memoria dinámica La mayoría de los lenguajes de programación permiten manejar dos tipos de almacenamiento de datos: Memoria estática: Que es la que se maneja tradicionalmente, cuyas características son: Se define explícitamente al declarar una variable, ya sea global o local. El compilador genera automáticamente el espacio de memoria. Se mantiene fija durante toda la vida de la variable. FCC-BUAP Primavera 2018 MC Beatriz Beltrán Martínez
Memoria dinámica Memoria dinámica: Que permite crear o destruir espacios de memoria, según indicaciones del programador durante la ejecución del programa, y cuyas características son: Utiliza una parte de la memoria principal denominada heap. Apoya el uso eficiente de la memoria durante la ejecución. Requiere de apuntadores que almacenen direcciones de memoria real. FCC-BUAP Primavera 2018 MC Beatriz Beltrán Martínez
Memoria dinámica Para reservar memoria se hace uso en lenguaje C de malloc y free. Para reservar memoria se hace uso en lenguaje C++ de new y delete. Cada vez que se este reservando memoria esta debe ser liberada antes de salir del programa. Se debe tener cuidado de no perder los apuntadores. FCC-BUAP Primavera 2018 MC Beatriz Beltrán Martínez
Listas Ligadas Una lista ligada es un grupo de datos organizados secuencialmente, pero a diferencia de los arreglos, la organización no esta dada implícitamente por su posición en el arreglo. En una lista ligada cada elemento es un nodo que contiene el dato y además una liga al siguiente dato. Estas ligas son simplemente variables que contienen la(s) dirección(es) de los datos contiguos o relacionados FCC-BUAP Primavera 2018 MC Beatriz Beltrán Martínez
Listas Ligadas Para manejar una lista es necesario contar con un apuntador al primer elemento de la lista denominado "cabeza". En una lista ligada se pueden realizar básicamente 4 operaciones: Recorrer: Moverse sobre los elementos de la lista, partiendo del inicio y llegando al final. Insertar: Añadir elementos a la lista. Eliminar: Quitar elementos de la lista. Buscar: Verificar la existencia de un elemento dado dentro de la lista. FCC-BUAP Primavera 2018 MC Beatriz Beltrán Martínez
Listas Ligadas Se usará Crea_nodo(P) para indicar la asignación de memoria dinámica que es apuntada por P, esto es: Para referirse a datos almacenados se utiliza la notación: P^.info P^.sig FCC-BUAP Primavera 2018 P info sig MC Beatriz Beltrán Martínez
Listas Ligadas Para indicar que el apuntador sig anota a nulo (nada) se utiliza: Y se denota por: P^.sig NULO FCC-BUAP Primavera 2018 P info sig MC Beatriz Beltrán Martínez
Lista Ligada Simple - Insertar Al inicio la cabeza = NULO. Se inserta el primer dato, con lo cual: Ahora si se inserta otro dato, si este es menor, quedaría: FCC-BUAP Primavera 2018 P 20 Cabeza MC Beatriz Beltrán Martínez P Cabeza 7 20 Cabeza
Insertar Si el dato es mayor que todos los datos en la lista, queda: Finalmente el caso más general, es insertar entre dos elementos de la lista, siendo este dato mayor al elemento que esté a la izquierda y menor que el dato que esté a la derecha. FCC-BUAP Primavera 2018 Cabeza P 7 20 35 MC Beatriz Beltrán Martínez
Insertar Quedando así: Cabeza 7 20 35 P 29 FCC-BUAP Primavera 2018 MC Beatriz Beltrán Martínez P 29
Lista Ligada Simple - Eliminar Si la cabeza = NULO, entonces marcar error. Si la cabeza es el elemento a eliminar, el siguiente elemento ahora será la cabeza: FCC-BUAP Primavera 2018 Cabeza Cabeza 7 20 29 MC Beatriz Beltrán Martínez P 35
Eliminar Cuando el elemento a eliminar esta en medio de la lista, quedaría: O bien, si es el último elemento en la lista: FCC-BUAP Primavera 2018 Cabeza 20 29 35 P MC Beatriz Beltrán Martínez Cabeza 20 29 35