Page 251

CC 2003, 2008 Andr´ es Marzal e Isabel Gracia

4 Estructuras de datos: memoria din´amica

Un diccionario vac´ıo no tiene palabra alguna ni memoria reservada. Esta funci´on crea un diccionario: 1 2 3 4 5 6 7

struct Diccionario crea_diccionario(void) { struct Diccionario d; d.palabra = NULL; d.palabras = 0; return d; }

Ya podemos desarrollar la funci´ on que inserta una palabra en el diccionario. Lo primero que har´a la funci´ on es comprobar si la palabra ya est´a en el diccionario. En tal caso, no har´a nada: 1 2 3

void inserta_palabra_en_diccionario(struct Diccionario * d, char pal []) { int i;

4

for (i=0; i<d->palabras; i++) if (strcmp(d->palabra[i], pal )==0) return; ...

5 6 7 8 9

}

Si la palabra no est´ a, hemos de a˜ nadirla: 1 2 3

void inserta_palabra_en_diccionario(struct Diccionario * d, char pal []) { int i;

4

for (i=0; i<d->palabras; i++) if (strcmp(d->palabra[i], pal )==0) return;

5 6 7 8

d->palabra = realloc(d->palabra, (d->palabras+1) * sizeof (char *)); d->palabra[d->palabras] = malloc((strlen(pal )+1) * sizeof (char)); strcpy(d->palabra[d->palabras], pal ); d->palabras++;

9 10 11 12 13

}

Podemos liberar la memoria ocupada por un diccionario cuando no lo necesitamos m´as llamando a esta otra funci´ on: 1 2 3

void libera_diccionario(struct Diccionario * d) { int i;

4

if (d->palabra != NULL) { for (i=0; i<d->palabras; i++) free(d->palabra[i]); free(d->palabra); d->palabra = NULL; d->palabras = 0; }

5 6 7 8 9 10 11 12

}

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . · 239 Dise˜ na una funci´ on que devuelva cierto (valor 1) o falso (valor 0) en funci´on de si una palabra pertenece o no a un diccionario. · 240 Dise˜ na una funci´ on que borre una palabra del diccionario. · 241 Dise˜ na una funci´ on que muestre por pantalla todas la palabras del diccionario que empiezan por un prefijo dado (una cadena). Introducci´ on a la Programaci´ on con C

245

Profile for esLibre.com

Introducción a la programación con c  

Introducción a la programación con c  

Advertisement