#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);
}
}