- #include <stdio.h> 
- #include <stdlib.h> 
- #include <string.h> 
- #define NILL 0 
-   
- struct lista_elementos { 
-     char carac[40]; 
-     struct lista_elementos *sig; 
-     struct lista_elementos *ant; 
- }; 
- typedef struct lista_elementos nodo; 
- int menu (void); 
- nodo *crear (nodo *pt); 
- nodo *buscar_palabra (nodo *lista); 
- nodo *borrar_palabra (nodo *lista,nodo *primero); 
- void mostrar_lista (nodo *lista); 
- main () { 
-     nodo *lista; 
-     nodo *primero; 
-     int eleccion; 
-     do { 
-         eleccion = menu(); 
-         switch (eleccion) { 
-             case 1 : //crear la lista doblemente enlazada 
-                 lista = (nodo *) malloc (sizeof(nodo)); //reserva el espacio para el primer nodo 
-                 crear(lista); 
-                 break; 
-             case 2 : //muestra la lista 
-                 mostrar_lista(lista); 
-                 break; 
-             case 3 : //borra el componente que corresponde a la palabra 
-                 lista = borrar_palabra(lista,primero); 
-                 break; 
-             default: //finalizar 
-                 printf("Fin de las operacionesn"); 
-         } 
-     } while (eleccion != 4); 
- } 
-   
- int menu(void) { 
-     int eleccion; 
-     do { 
-         printf("nMenu principaln"); 
-         printf("1. Crea la lista doblemente enlazadan"); 
-         printf("2. Muestra la listan"); 
-         printf("3. Borra el componente que corresponde a la palabra buscadan"); 
-         printf("Elija la opcionn: "); 
-         scanf("%d",&eleccion); 
-         setbuf(stdin,NULL); 
-         if (eleccion<1 || eleccion>4) { 
-             printf("n El valor introducido no se corresponde con ninguna"); 
-             printf("nde las posibilidades del menu. Intentelo de nuevo n"); 
-         } 
-     } while (eleccion<1 || eleccion>4); 
-     return(eleccion); 
- } 
-   
- nodo *crear (nodo *lista) { 
-     printf("Introduce la palabra que quieres meter en la lista(para terminar FIN)n: "); 
-     setbuf(stdin,NULL); 
-     scanf("%[^n]",lista->carac); 
-     if (strcmp (lista->carac,"FIN") == 0) { 
-         lista->sig=NULL; 
-         lista->ant=NULL; 
-     } 
-     else { 
-         lista->sig=(nodo *) malloc (sizeof(nodo)); 
-         crear(lista->sig); 
-     } 
- return(lista); 
- } 
-   
- nodo *borrar_palabra (nodo *lista,nodo *primero) { 
-     primero = buscar_palabra(lista); 
-     if (primero != NULL) { 
-         if (primero->sig == NULL) { 
-             primero->ant->sig=NULL; 
-             free(primero); 
-         } 
-         else { 
-             if (primero == lista) { 
-                 lista=primero->sig; 
-                 free(primero); 
-             } 
-             else { 
-                 primero->ant=primero->sig; 
-                 free(primero); 
-             } 
-         } 
-     } 
-     else 
-         printf("No hay nada que borrarn"); 
-     return(lista); 
- } 
-   
- nodo *buscar_palabra (nodo *lista) { 
-     nodo *primero; 
-     char palabra[40]; 
-     printf("Introduce la palabra que quieres que busque el programa: "); 
-     scanf("%[^n]",palabra); 
-     primero=lista; 
-     while (primero != NULL) { 
-         if (strcmp(primero->carac,palabra) != 0) { 
-             primero=primero->sig; 
-             return(NULL); 
-         } 
-         else { 
-             printf("Palabra encontradan"); 
-             return(primero); 
-         } 
-     } 
- } 
-   
- void mostrar_lista (nodo *lista) { 
-     if (lista->sig != NULL) { 
-         printf("%sn",lista->carac); 
-         mostrar_lista(lista->sig); 
-     } 
- } 
-