La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Programación I Técnico Universitario en Web Dpto. de Informática FCFMyN - UNSL -11-

Presentaciones similares


Presentación del tema: "Programación I Técnico Universitario en Web Dpto. de Informática FCFMyN - UNSL -11-"— Transcripción de la presentación:

1 Programación I Técnico Universitario en Web Dpto. de Informática FCFMyN - UNSL -11-

2 2 Asignación Dinámica de Memoria para una Variable   Se refiere a las variables cuya memoria se reserva de forma dinamica, es decir, memoria que se crea y se debe liberar de forma explicita en tiempo de ejecucion   El tiempo de vida de las variables depende del momento en que se les asigna y desasigna memoria.   La biblioteca estandar de C proporciona, entre otras, las funciones malloc, y free para el manejo de memoria dinamica con punteros. cabecera stdlib.h   El operador unario sizeof es fundamentales para el manejo dinamico de la memoria. Programación I – Datos Recursivos Asignación Dinámica de Memoria

3 3 malloc:   Toma como argumento el numero de bytes que se solicitan y retorna un puntero a void (void *) que apunta a la memoria asignada. Un puntero a void puede ser asignado a una variable de cualquier tipo puntero. Si no hay suficiente memoria para asignar, entonces retorna NULL, Esto permite controlar si se pudo realizar o no la asignacion de memoria.   malloc es usada en combinacion con sizeof para indicar la cantidad de bytes a pedir.   sizeof es un operador que recibe como operando un tipo de dato y retorna el tamano que ocupa en memoria un objeto del tipo de dato al cual se le aplico el operador. Ejemplo, sizeof(float) me permitira conocer cuantos bytes ocupa un float. Programación I – Datos Recursivos Asignación Dinámica de Memoria

4 4 newPtr = malloc(sizeof(struct nodo));   evalua sizeof(struct node) para determinar el tamano en bytes de un registro de tipo struct nodo,   asigna una nueva area de memoria con esa cantidad de bytes y devuelve un puntero a esa area el cual es almacenado en la variable newPtr. Si no hubiese habido suficiente memoria para asignar, malloc retornaria NULL. Programación I – Datos Recursivos Asignación Dinámica de Memoria

5 5   La funcion free desasigna memoria. Esto significa que la memoria apuntada por el puntero al que se le aplica free es retornada al sistema y en consecuencia la misma podra ser reasignada en el futuro.   Ejemplo:   Si se quesiera liberar la memoria previamente solicitada por la sentencia malloc, se hace free(newPtr);   Esto es de suma utilidad a la hora de implementar estructuras de datos con datos recursivos, manejadas con asignacion dinamica de la memoria. Programación I – Datos Recursivos Asignación Dinámica de Memoria

6 6   Se pueden dar soluciones recursivas cuando los datos a tratar tienen una definicion recursiva.   Listas: El caso de listas de elementos es un ejemplo de datos que pueden definirse recursivamente y en consecuencia ser tratados de la misma manera.   Asi, dados e, que denota un elemento de lista y  que denota la lista vacia, podemos definir una lista L, en forma recursiva, diciendo que: L =   L = e L Programación I – Datos Recursivos

7 7   Definición en C de un tipo de dato recursivo struct nodo { char vipd; struct nodo *next; } …. typedef struct nodo *PNodo; /*Luego la declaracion de lisChar, puede ser hecha como*/ PNodo lisChar = NULL; Programación I – Datos Recursivos

8 8 Lista Vacia Lista con Elementos Programación I – Datos Recursivos

9 9 Impresión de una Lista Recursiva Programación I – Datos Recursivos

10 10 Para Recordar antes de la Implementación Programación I – Datos Recursivos

11 11 Programación I – Datos Recursivos Implementación de Lista con DR

12 12 Redefinición de función imprimeLista Programación I – Datos Recursivos Implementación de Lista con DR

13 13 Pseudocódigo de función insertar: void insertar(lista, elem) // tipos de param? { Si la lista esta vacia { //inserto en el 1º lugar // acomodo Acc y el ps de elem. // acomodo Acc y el ps de elem. }sino { /* acomodo siguiente de elem, (elem.ps = curaux.ps) y /* acomodo siguiente de elem, (elem.ps = curaux.ps) y al ps de curaux le doy la dir del elem.*/ al ps de curaux le doy la dir del elem.*/ }} Pregunta: ¿Como hago para crear elem e insertarlo en la lista? Programación I – Datos Recursivos Implementación de Lista con DR


Descargar ppt "Programación I Técnico Universitario en Web Dpto. de Informática FCFMyN - UNSL -11-"

Presentaciones similares


Anuncios Google