SlideShare una empresa de Scribd logo
1 de 16
ESTRUCTURA DE DATOS II MEMORIA DINAMICA UNIVERSIDAD AUTONOMA "GABRIEL RENE MORENO" FACULTAD DE CIENCIAS EXACTAS Y TECNOLOGIA ,[object Object],[object Object]
Introducción Una buena comprensión y un buen dominio de los punteros pondrán en tu mano una herramienta de gran potencia. Un conocimiento mediocre o incompleto te impedirá desarrollar programas eficaces.  Ahora veremos como funciona los punteros. Un entero es un tipo especial de variable que contiene una dirección de memoria. A partir de esa dirección de memoria puede haber cualquier tipo de objeto : un char,  int, float, un array, una estructura, una función u otro puntero
Que es la Memoria  Dinamica Es la forma de implementación de una estructura de datos usando la memoria en forma dinámica del computador, esto consiste en que nuestro programa o estructura de dato solicite un espacio de memoria libre al  Sistema Operativo, el Sistema Operativo verifica si existe el tamaño solicitado y lo asigna si lo hubiera ,caso contrario devuelve un puntero nulo.     De  la misma forma solicitada una ves ya no usada se debe devolver al Sistema Operativo.    
Características de las Memorias  Dinámicas Así, durante la ejecución de un programa puede haber una posición de memoria especifica asociada con una variable dinámica y posteriormente puede no existir ningún posición de memoria asociada con ella.    ,[object Object],En muchas ocasiones se necesitan estructuras que puedan cambiar de tamaño durante la ejecución del programa. ,[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object]
  Implementación  de  Memorias Dinámicas       Creación de Objetos:  La memoria se reserva explícitamente mediante  el operador new.       Duración de Los Objetos:  Los objetos necesitan ser destruidos explícitamente,  con el operador delete.       Indice de Arrays:   El índice de un array puede ser un valor variable, de modo que la cantidad de memoria reservada por una línea de código puede variar en tiempo de ejecución (runtime). Ej: int* n = new int [variable no const]           //correcto      
Datos Dinámicos: Las estructuras de datos  dinámicas son útiles especialmente para almacenar y procesar conjunto de datos cuyos tamaños cambian durante la ejecución del programa    Variables Dinámicas:   Cuando se ejecuta un programa el sistema operativo reserva una zona de memoria para el código o instrucciones del programa y otra para las variables que se usan durante la ejecución.    A menudo estas zonas son las mismas zona, a esto es lo que se llama memoria local. También hay otras zonas de memoria, como la pila, que se usa entre otras cosas, para intercambiar datos entre funciones. El resto, la memoria que no se usa por ningún programa es lo que se conoce como “ heap “ o montón. Cuando nuestro programa use memoria dinámica, normalmente usará memoria del montón, y no se llama así porque sea de peor calidad, sino porque suele haber realmente un montón de memoria de este tipo.   
Tipos de datos Dinámicos:   Existen diferentes tipos de estructuras de datos dinámicas siendo las mas notable y significativa los punteros las listas enlazadas, listas Circulares, los arbole y los grafos   Listas abiertas:  cada elemento sólo dispone de un puntero, que apuntará al siguiente elemento de la lista o valdrá NULL si es el último elemento.      Pilas:   son un tipo especial de lista, conocidas como listas LIFO (Last In, First Out: el último en entrar es el primero en salir). Los elementos se "amontonan" o apilan, de modo que sólo el elemento que está encima de la pila puede ser leído, y sólo pueden añadirse elementos encima de la pila.      Colas:   otro tipo de listas, conocidas como listas FIFO (First In, First Out: El primero en entrar es el primero en salir). Los elementos se almacenan en fila, pero sólo pueden añadirse por un extremo y leerse por el otro.     
VENTAJAS: Es posible disponer de un espacio de memoria arbitrario que dependa de información dinámica (disponible sólo en ejecución): Toda esa memoria que maneja es implementada por el programador cuando  fuese necesario. DESVENTAJAS: Es difícil de implementar en el desarrollo de un programa o aplicación.  Es difícil  implementar estructuras de datos complejas como son los tipos recursivos (árboles, grafos, etc.).Por ello necesitamos una forma para solicitar y liberar memoria para nuevas variables que puedan ser necesarias durante la ejecución de nuestros programas: Heap.    
Ejemplo funcional  en Pascal     Hacer un programa que lea un numero n , y luego cargue los elementos por teclado y después que los muestre.    En Pascal :     program prog01;     uses     crt;     type       pnodo1=^nodo1;   nodo1=record   dato:integer;   ps:pnodo1;   end;   var   r,p,q:pnodo1;   i:integer;     x:integer;    
begin     ClrScr;       p:=nil;       i:=0;       write('cuantos nodos quiere? ');       readln(x);     writeln ('Introduzca los valores');     while(i<x)do     begin     new(q);     readln(q^.dato);     if(p=nil)then
begin     q^.ps:=p;     p:=q;     end   else   begin     r:=p;     while(r^.ps<>nil)do     r:=r^.ps;   q^.ps:=r^.ps;     r^.ps:=q;   end;       i:=i+1;       end;       writeln('los numeros son: ');      r:=p;   while(r<>nil)do     begin       writeln('->',r^.dato);       r:= r^.ps;      end;   readln;   end.
Un  Ejemplo En C++:     #include <vcl.h>   #include <iostream.h>   #include <conio.h>     #pragma hdrstop     #pragma argsused   struct nodo{   int dato;   nodo *link;   };   void main(){   nodo *a,*b,*L;     int n,val;     cout<<&quot;Introduzca la dimension &quot;;     cin>>n;     cout<<&quot;Introduzca los valores &quot;;    
a=new nodo();     for(int i=0;i<n;i++){     if(i==0){       cin>>val;       a->dato=val;       a->link=NULL;       L=a;       }       else{       b=new nodo();       cin>>val;       b->dato=val;       a->link=b;       b->link=NULL;       a=b;       } // else    
} // for a=L; cout<<&quot;Los valores son &quot;; while(a!=NULL){ cout<<a->dato<<&quot;  &quot;; a=a->link; } getche(); } Hacer un programa que cree un boton dinámicamente void __fastcall TForm1::Button1Click(TObject *Sender) { TButton *a=new TButton(this); TButton *b=new TButton(this); a->Parent=this; b->Parent=this; b->Top=200; a->Top=200; a->Left=300; b->Left=200; b->Caption=&quot;Estructura&quot;; a->Caption=&quot;II&quot;; }
Fin De  La Exposicion Para mas informacion Consultar a los Expositores

Más contenido relacionado

La actualidad más candente

Programación 3: árboles binarios y ordenados
Programación 3: árboles binarios y ordenadosProgramación 3: árboles binarios y ordenados
Programación 3: árboles binarios y ordenadosAngel Vázquez Patiño
 
MODELOS DE REDES
MODELOS DE REDESMODELOS DE REDES
MODELOS DE REDESNeli Ponce
 
Normalización de Base de Datos
Normalización de Base de DatosNormalización de Base de Datos
Normalización de Base de DatosJorge Luis Chalén
 
Importancia de la implementación de las listas para la estructura de datos
Importancia de la implementación de las listas para la estructura de datosImportancia de la implementación de las listas para la estructura de datos
Importancia de la implementación de las listas para la estructura de datospepelebu1313
 
Estructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no linealesEstructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no linealesJosé Antonio Sandoval Acosta
 
Normalización en Bases de datos
Normalización en Bases de datosNormalización en Bases de datos
Normalización en Bases de datoskamui002
 
2 1 vistas arquitectonicas
2 1 vistas arquitectonicas2 1 vistas arquitectonicas
2 1 vistas arquitectonicaslandeta_p
 
Investigacion de operaciones II
Investigacion de operaciones IIInvestigacion de operaciones II
Investigacion de operaciones IIsonibermora
 
Sesion 3 2 modelo de analisis
Sesion 3 2 modelo de analisisSesion 3 2 modelo de analisis
Sesion 3 2 modelo de analisisJulio Pari
 
Algoritmos de Dijkstra, Warshall, Ordenación Topológica.
Algoritmos de Dijkstra, Warshall, Ordenación Topológica.Algoritmos de Dijkstra, Warshall, Ordenación Topológica.
Algoritmos de Dijkstra, Warshall, Ordenación Topológica.Bryan Aguilar Yaguana
 
1. modelo entidad relacion ejemplo
1. modelo entidad relacion   ejemplo1. modelo entidad relacion   ejemplo
1. modelo entidad relacion ejemplouniv of pamplona
 
Componentes y evolucion del modelado de negocios(investigacion)
Componentes y evolucion del modelado de negocios(investigacion)Componentes y evolucion del modelado de negocios(investigacion)
Componentes y evolucion del modelado de negocios(investigacion)Anel Sosa
 

La actualidad más candente (20)

Programación 3: árboles binarios y ordenados
Programación 3: árboles binarios y ordenadosProgramación 3: árboles binarios y ordenados
Programación 3: árboles binarios y ordenados
 
Base de datos orientada a objetos
Base de datos orientada a objetosBase de datos orientada a objetos
Base de datos orientada a objetos
 
Algoritmo De Cuadrados Medios
Algoritmo De Cuadrados MediosAlgoritmo De Cuadrados Medios
Algoritmo De Cuadrados Medios
 
Reglas de transformación
Reglas de transformaciónReglas de transformación
Reglas de transformación
 
MODELOS DE REDES
MODELOS DE REDESMODELOS DE REDES
MODELOS DE REDES
 
Normalización de Base de Datos
Normalización de Base de DatosNormalización de Base de Datos
Normalización de Base de Datos
 
Importancia de la implementación de las listas para la estructura de datos
Importancia de la implementación de las listas para la estructura de datosImportancia de la implementación de las listas para la estructura de datos
Importancia de la implementación de las listas para la estructura de datos
 
Recursividad
RecursividadRecursividad
Recursividad
 
Tipos de listas en estructura de datos
Tipos de listas en estructura de datosTipos de listas en estructura de datos
Tipos de listas en estructura de datos
 
Estructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no linealesEstructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no lineales
 
Normalización en Bases de datos
Normalización en Bases de datosNormalización en Bases de datos
Normalización en Bases de datos
 
2 1 vistas arquitectonicas
2 1 vistas arquitectonicas2 1 vistas arquitectonicas
2 1 vistas arquitectonicas
 
Estructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busquedaEstructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busqueda
 
Investigacion de operaciones II
Investigacion de operaciones IIInvestigacion de operaciones II
Investigacion de operaciones II
 
Sesion 3 2 modelo de analisis
Sesion 3 2 modelo de analisisSesion 3 2 modelo de analisis
Sesion 3 2 modelo de analisis
 
Algoritmos de Dijkstra, Warshall, Ordenación Topológica.
Algoritmos de Dijkstra, Warshall, Ordenación Topológica.Algoritmos de Dijkstra, Warshall, Ordenación Topológica.
Algoritmos de Dijkstra, Warshall, Ordenación Topológica.
 
1. modelo entidad relacion ejemplo
1. modelo entidad relacion   ejemplo1. modelo entidad relacion   ejemplo
1. modelo entidad relacion ejemplo
 
Componentes y evolucion del modelado de negocios(investigacion)
Componentes y evolucion del modelado de negocios(investigacion)Componentes y evolucion del modelado de negocios(investigacion)
Componentes y evolucion del modelado de negocios(investigacion)
 
Listas
ListasListas
Listas
 
Normalizacion de Base de datos,
Normalizacion de Base de datos, Normalizacion de Base de datos,
Normalizacion de Base de datos,
 

Similar a Memoria dinámica estructuras datos

Similar a Memoria dinámica estructuras datos (20)

Apuntadores y listas
Apuntadores y listasApuntadores y listas
Apuntadores y listas
 
Modelo Dinamico
Modelo DinamicoModelo Dinamico
Modelo Dinamico
 
Modelo Simulado
Modelo SimuladoModelo Simulado
Modelo Simulado
 
ESTRUCTURA DE DATOS
ESTRUCTURA DE DATOSESTRUCTURA DE DATOS
ESTRUCTURA DE DATOS
 
Memoria dinamica
Memoria dinamicaMemoria dinamica
Memoria dinamica
 
Manejo de memoria
Manejo de memoriaManejo de memoria
Manejo de memoria
 
2rias5me
2rias5me2rias5me
2rias5me
 
Algoritsmos unefa
Algoritsmos unefaAlgoritsmos unefa
Algoritsmos unefa
 
Estructura datos unidad-2_y_3
Estructura datos unidad-2_y_3Estructura datos unidad-2_y_3
Estructura datos unidad-2_y_3
 
Estructura datos unidad-2_y_3
Estructura datos unidad-2_y_3Estructura datos unidad-2_y_3
Estructura datos unidad-2_y_3
 
Estructura de datos c++
Estructura de datos c++Estructura de datos c++
Estructura de datos c++
 
DIAPOSITIVAS DE LA UNIDAD 3
DIAPOSITIVAS DE LA UNIDAD 3DIAPOSITIVAS DE LA UNIDAD 3
DIAPOSITIVAS DE LA UNIDAD 3
 
principales datos simples
principales datos simplesprincipales datos simples
principales datos simples
 
Cplus
CplusCplus
Cplus
 
C++
C++C++
C++
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 
Algoritmo y mas teoria logica
Algoritmo y mas teoria logicaAlgoritmo y mas teoria logica
Algoritmo y mas teoria logica
 
Unidad 2 & 3 estructura datos
Unidad 2 & 3 estructura datosUnidad 2 & 3 estructura datos
Unidad 2 & 3 estructura datos
 
Tipos de Datos Abstractos (TDA)
Tipos de Datos Abstractos (TDA)Tipos de Datos Abstractos (TDA)
Tipos de Datos Abstractos (TDA)
 
37 tarazona karen programacion
37 tarazona karen programacion37 tarazona karen programacion
37 tarazona karen programacion
 

Memoria dinámica estructuras datos

  • 1.
  • 2. Introducción Una buena comprensión y un buen dominio de los punteros pondrán en tu mano una herramienta de gran potencia. Un conocimiento mediocre o incompleto te impedirá desarrollar programas eficaces. Ahora veremos como funciona los punteros. Un entero es un tipo especial de variable que contiene una dirección de memoria. A partir de esa dirección de memoria puede haber cualquier tipo de objeto : un char, int, float, un array, una estructura, una función u otro puntero
  • 3. Que es la Memoria Dinamica Es la forma de implementación de una estructura de datos usando la memoria en forma dinámica del computador, esto consiste en que nuestro programa o estructura de dato solicite un espacio de memoria libre al Sistema Operativo, el Sistema Operativo verifica si existe el tamaño solicitado y lo asigna si lo hubiera ,caso contrario devuelve un puntero nulo.   De la misma forma solicitada una ves ya no usada se debe devolver al Sistema Operativo.  
  • 4.
  • 5.
  • 6.   Implementación de Memorias Dinámicas     Creación de Objetos: La memoria se reserva explícitamente mediante el operador new.     Duración de Los Objetos: Los objetos necesitan ser destruidos explícitamente, con el operador delete.     Indice de Arrays: El índice de un array puede ser un valor variable, de modo que la cantidad de memoria reservada por una línea de código puede variar en tiempo de ejecución (runtime). Ej: int* n = new int [variable no const]           //correcto    
  • 7. Datos Dinámicos: Las estructuras de datos dinámicas son útiles especialmente para almacenar y procesar conjunto de datos cuyos tamaños cambian durante la ejecución del programa   Variables Dinámicas:   Cuando se ejecuta un programa el sistema operativo reserva una zona de memoria para el código o instrucciones del programa y otra para las variables que se usan durante la ejecución.   A menudo estas zonas son las mismas zona, a esto es lo que se llama memoria local. También hay otras zonas de memoria, como la pila, que se usa entre otras cosas, para intercambiar datos entre funciones. El resto, la memoria que no se usa por ningún programa es lo que se conoce como “ heap “ o montón. Cuando nuestro programa use memoria dinámica, normalmente usará memoria del montón, y no se llama así porque sea de peor calidad, sino porque suele haber realmente un montón de memoria de este tipo.  
  • 8. Tipos de datos Dinámicos: Existen diferentes tipos de estructuras de datos dinámicas siendo las mas notable y significativa los punteros las listas enlazadas, listas Circulares, los arbole y los grafos Listas abiertas: cada elemento sólo dispone de un puntero, que apuntará al siguiente elemento de la lista o valdrá NULL si es el último elemento.     Pilas: son un tipo especial de lista, conocidas como listas LIFO (Last In, First Out: el último en entrar es el primero en salir). Los elementos se &quot;amontonan&quot; o apilan, de modo que sólo el elemento que está encima de la pila puede ser leído, y sólo pueden añadirse elementos encima de la pila.     Colas: otro tipo de listas, conocidas como listas FIFO (First In, First Out: El primero en entrar es el primero en salir). Los elementos se almacenan en fila, pero sólo pueden añadirse por un extremo y leerse por el otro.    
  • 9. VENTAJAS: Es posible disponer de un espacio de memoria arbitrario que dependa de información dinámica (disponible sólo en ejecución): Toda esa memoria que maneja es implementada por el programador cuando fuese necesario. DESVENTAJAS: Es difícil de implementar en el desarrollo de un programa o aplicación. Es difícil implementar estructuras de datos complejas como son los tipos recursivos (árboles, grafos, etc.).Por ello necesitamos una forma para solicitar y liberar memoria para nuevas variables que puedan ser necesarias durante la ejecución de nuestros programas: Heap.  
  • 10. Ejemplo funcional en Pascal   Hacer un programa que lea un numero n , y luego cargue los elementos por teclado y después que los muestre.   En Pascal :   program prog01;   uses   crt;   type   pnodo1=^nodo1; nodo1=record dato:integer; ps:pnodo1; end; var r,p,q:pnodo1; i:integer;   x:integer;  
  • 11. begin   ClrScr;   p:=nil;   i:=0;   write('cuantos nodos quiere? ');   readln(x);   writeln ('Introduzca los valores');   while(i<x)do   begin   new(q);   readln(q^.dato);   if(p=nil)then
  • 12. begin q^.ps:=p; p:=q; end else begin r:=p; while(r^.ps<>nil)do r:=r^.ps; q^.ps:=r^.ps; r^.ps:=q; end;   i:=i+1;   end;   writeln('los numeros son: ');   r:=p; while(r<>nil)do   begin   writeln('->',r^.dato);   r:= r^.ps;   end; readln; end.
  • 13. Un Ejemplo En C++:   #include <vcl.h> #include <iostream.h> #include <conio.h>   #pragma hdrstop   #pragma argsused struct nodo{ int dato; nodo *link; }; void main(){ nodo *a,*b,*L;   int n,val;   cout<<&quot;Introduzca la dimension &quot;;   cin>>n;   cout<<&quot;Introduzca los valores &quot;;  
  • 14. a=new nodo();   for(int i=0;i<n;i++){   if(i==0){   cin>>val;   a->dato=val;   a->link=NULL;   L=a;   }   else{   b=new nodo();   cin>>val;   b->dato=val;   a->link=b;   b->link=NULL;   a=b;   } // else  
  • 15. } // for a=L; cout<<&quot;Los valores son &quot;; while(a!=NULL){ cout<<a->dato<<&quot; &quot;; a=a->link; } getche(); } Hacer un programa que cree un boton dinámicamente void __fastcall TForm1::Button1Click(TObject *Sender) { TButton *a=new TButton(this); TButton *b=new TButton(this); a->Parent=this; b->Parent=this; b->Top=200; a->Top=200; a->Left=300; b->Left=200; b->Caption=&quot;Estructura&quot;; a->Caption=&quot;II&quot;; }
  • 16. Fin De La Exposicion Para mas informacion Consultar a los Expositores