Page 219

Cap´ıtulo 4

Estructuras de datos: memoria din´ amica La Reina se puso congestionada de furia, y, tras lanzarle una mirada felina, empez´o a gritar: ((¡Que le corten la cabeza! ¡Que le corten. . . !)). Lewis Carroll, Alicia en el Pa´ıs de las Maravillas. Vimos en el cap´ıtulo 2 que los vectores de C presentaban un serio inconveniente con respecto a las listas de Python: su tama˜ no deb´ıa ser fijo y conocido en tiempo de compilaci´on, es decir, no pod´ıamos alargar o acortar los vectores para que se adaptaran al tama˜ no de una serie de datos durante la ejecuci´ on del programa. C permite una gesti´on din´amica de la memoria, es decir, solicitar memoria para albergar el contenido de estructuras de datos cuyo tama˜ no exacto no conocemos hasta que se ha iniciado la ejecuci´on del programa. Estudiaremos aqu´ı dos formas de superar las limitaciones de tama˜ no que impone el C: mediante vectores cuyo tama˜ no se fija en tiempo de ejecuci´on, y mediante registros enlazados, tambi´en conocidos como listas enlazadas (o, simplemente, listas). Ambas aproximaciones se basan en el uso de punteros y cada una de ellas presenta diferentes ventajas e inconvenientes.

4.1.

Vectores din´ amicos

Sabemos definir vectores indicando su tama˜ no en tiempo de compilaci´on: 1

#define TALLA 10

2 3

int a[TALLA];

Pero, ¿y si no sabemos a priori cu´ antos elementos debe albergar el vector?1 Por lo estudiado hasta el momento, podemos definir TALLA como el n´ umero m´as grande de elementos posible, el n´ umero de elementos para el peor de los casos. Pero, ¿y si no podemos determinar un n´ umero m´ aximo de elementos? Aunque pudi´eramos, ¿y si ´este fuera tan grande que, en la pr´actica, supusiera un despilfarro de memoria intolerable para situaciones normales? Imagina una aplicaci´ on de agenda telef´ onica personal que, por si acaso, reserva 100000 entradas en un vector. Lo m´ as probable es que un usuario convencional no gaste m´as de un centenar. Estaremos desperdiciando, pues, unas 99900 celdas del vector, cada una de las cuales puede consistir en un centenar de bytes. Si todas las aplicaciones del ordenador se dise˜ naran as´ı, la memoria disponible se agotar´ıa rapid´ısimamente. 1 En la secci´ on 3.5.3 vimos c´ omo definir vectores locales cuya talla se decide al ejecutar una funci´ on: lo que denominamos ((vectores de longitud variable)). Nos proponemos dos objetivos: por una parte, poder redimensionar vectores globales; y, por otro, vamos a permitir que un vector crezca y decrezca en tama˜ no cuantas veces queramos. Los ((vectores de longitud variable)) que estudiamos en su momento son inapropiados para cualquiera de estos dos objetivos.

Introducci´ on a la Programaci´ on con C

213

Profile for esLibre.com

Introducción a la programación con c  

Introducción a la programación con c  

Advertisement