estructuras de datos

Páginas: 11 (2582 palabras) Publicado: 26 de mayo de 2013
ESTRUCTURAS DE DATOS: MEMORIA
ESFM
DINIAMICA
En C permite solicitar memoria para albergar el contenido de estructuras de datos cuyo tamaño exacto no conocemos hasta que se ha iniciado la ejecución del programa. Hay dos formas de superar las limitaciones de tamaño que impone el C:
Mediante vectores cuyo tamaño se fija en tiempo de ejecución, y mediante registros enlazados, también conocidoscomo listas enlazadas (o, simplemente, listas).
Ambas aproximaciones se basan en el uso de punteros y cada una de ellas presenta diferentes Ventajas e inconvenientes.
VECTORES DINÁMICOS
Sabemos definir vectores indicando su tamaño en tiempo de compilación:
#define TALLA 10
int a [TALLA];
Pero, ¿y si no sabemos a priori cuantos elementos debe albergar el vector? O ¿Y si no podemos determinarun numero máximo de elementos? Aunque pudiéramos, ¿y si este fuera tan grande?, al hacerlo se desperdiciaría una gran cantidad de memoria y la memoria disponible se agotaría rápidamente.
MALLOC, FREE Y NULL
Afortunadamente, podemos definir, durante la ejecución del programa, vectores cuyo tamaño es exactamente el que el usuario necesita. Utilizaremos para ello dos funciones de la bibliotecaestándar (disponibles incluyendo la cabecera stdlib.h):
malloc (abreviatura de ((memory allocate)), que podemos traducir por ((reservar memoria
))): Solicita un bloque de memoria del tamaño que se indique (en bytes);
free (que en ingles significa ((liberar))): libera memoria obtenida con malloc, es decir, la marca como disponible para futuras llamadas a malloc.
Ejemplo:
La función malloc no se usasolo para reservar vectores dinámicos de enteros, puedes reservar con ella vectores dinámicos de cualquier tipo base En C es posible sumar o restar un valor entero a un puntero. El entero se interpreta como un desplazamiento dado en unidades ((tamaño del tipo base)) (en el ejemplo, 4 bytes, que es el tamaño de un int). Es lo que se conoce por aritmética de punteros.
free recibe un puntero acualquier tipo de datos: la dirección de memoria en la que empieza un bloque previamente obtenido con una llamada a malloc. Lo que hace free es liberar ese bloque de memoria, es decir, considerar que pasa a estar disponible para otras posibles llamadas a malloc. Puedes aprovechar así la memoria de forma óptima. Conviene que después de hacer free asignes al puntero el valor NULL, especialmente si lavariable sigue ((viva)) durante bastante tiempo, Si un puntero vale NULL, se entiende que no apunta a un bloque de memoria
También puedes usar NULL para inicializar punteros y dejar explícitamente claro que no se les ha reservado memoria.
Representación de polígonos con un número arbitrario de vértices
Desarrollemos un ejemplo más: un programa que lea los vértices de un polígono y calcule superímetro. Empezaremos por crear un tipo de datos para almacenar los puntos de un polígono. Nuestro tipo de datos se define así:
struct Punto {float x, y;};
struct Polígono {
struct Punto * p;
int puntos;
};
Fíjate en que un polígono presenta un número de puntos inicialmente desconocido, por lo que hemos de recurrir a memoria dinámica.
Listas Python
Empieza a quedar claro que Python es unlenguaje mucho más cómodo que C para gestionar vectores dinámicos, que allí denominábamos listas. No obstante, debes tener presente que el intérprete de Python está escrito en C, así que cuando manejas listas Python estas, indirectamente, usando memoria dinámica como malloc y free.
El termino const sirve para indicar que, aunque es posible modificar la información apuntada por pol, no lo haremos. Enrealidad suministramos el puntero por cuestión de eficiencia, no porque deseemos modificar el contenido.
Las cadenas dinámicas son un caso particular de vector. Podemos usar cadenas de cualquier longitud gracias a la gestión de memoria dinámica.
Ejemplo:
Podemos extender la idea de los vectores dinámicos a matrices dinámicas. No podemos gestionar la matriz como una sucesión de elementos...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Estructura de Datos
  • Estructura De Datos
  • Estructura de datos
  • Estructura de datos
  • Estructura de datos
  • Estructuras de datos
  • Estructura de Datos
  • estructura de datos

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS