Page 255

4 Estructuras de datos: memoria din´amica

CC 2003, 2008 Andr´ es Marzal e Isabel Gracia

Podemos ahora implementar una funci´on de b´ usqueda de palabras m´as eficiente. Una primera idea consiste en buscar desde el principio y parar cuando se encuentre la palabra buscada o cuando se encuentre una palabra mayor (alfab´eticamente) que la buscada. En este u ´ltimo caso sabremos que la palabra no existe. Pero a´ un hay una forma m´as eficiente de saber si una palabra est´ a o no en una lista ordenada: mediante una b´ usqueda dicot´ omica. 1 2 3

int buscar_en_diccionario(struct Diccionario d, char pal []) { int izquierda, centro, derecha;

4

izquierda = 0; derecha = d.palabras; while (izquierda < derecha) { centro = (izquierda+derecha) / 2; if (strcmp(pal , d.palabra[centro]) == 0) return 1; else if (strcmp(pal , d.palabra[centro]) < 0) derecha = centro; else izquierda = centro+1; } return 0;

5 6 7 8 9 10 11 12 13 14 15 16 17

}

Podemos hacer una peque˜ na mejora para evitar el sobrecoste de llamar dos veces a la funci´on strcmp: 1 2 3

int buscar_en_diccionario(struct Diccionario d, char pal []) { int izquierda, centro, derecha, comparacion ;

4

izquierda = 0; derecha = d.palabras; while (izquierda < derecha) { centro = (izquierda+derecha) / 2; comparacion = strcmp(pal , d.palabra[centro]) ; if ( comparacion == 0) return 1; else if ( comparacion < 0) derecha = centro; else izquierda = centro+1; } return 0;

5 6 7 8 9 10 11 12 13 14 15 16 17 18

}

Juntemos todas las piezas y a˜ nadamos una funci´on main que nos pida primero las palabras del diccionario y, a continuaci´ on, nos pida palabras que buscar en ´el: diccionario.c 1 2 3

diccionario.c

#include <stdio.h> #include <stdlib.h> #include <string.h>

4 5

#define MAXLON 80

6 7 8 9 10

struct Diccionario { char ** palabra; int palabras; };

11 12 13 14

struct Diccionario crea_diccionario(void) { struct Diccionario d;

Introducci´ on a la Programaci´ on con C

249

Profile for esLibre.com

Introducción a la programación con c  

Introducción a la programación con c  

Advertisement