Código C:
Ver original
#include <stdio.h> #include <stdlib.h> #include <string.h> #define LEE_CAD(c,n) { int i=0; \ c[i]=getchar();\ while((c[i]=='\n') || (c[i]=='\t')) c[i]=getchar();\ while ((c[i]!='\n') && (i < (n-1))){ \ i++;\ c[i]=getchar(); }\ c[i]='\0'; } #define T_NOM 101 struct persona { char nom[100]; struct persona *siguiente; }; int main(){ struct persona *lista=NULL; struct persona *nodo; int op; void alta_inicio(); void alta_final(); void alta_despues_de(); void recorrer_lista(); void borrar_nodo(); struct persona * buscar_nodo(); do{ do{ }while((op < 1) || (op > 7)); if(op != 7) switch(op){ case 1: { alta_inicio(&lista);break;} case 2: { alta_final(&lista);break;} case 3: { recorrer_lista(&lista);break;} case 4: { nodo=buscar_nodo(&lista); case 5: { borrar_nodo(&lista);break;} case 6: { alta_despues_de(&lista);break;} } }while(op != 7); } //////////////////////////////////////////////////////////////////////////// void alta_inicio(struct persona **lista){ struct persona *nuevo_nodo; if(nuevo_nodo != NULL){ nuevo_nodo->siguiente = *lista; *lista = nuevo_nodo; LEE_CAD(nuevo_nodo->nom,T_NOM); } } //////////////////////////////////////////////////////////////////////////////// void recorrer_lista(struct persona **lista){ struct persona *nodo_aux; nodo_aux = *lista; while(nodo_aux != NULL){ nodo_aux = nodo_aux->siguiente; } } ////////////////////////////////////////////////////////////////////////////// void alta_final(struct persona **lista){ struct persona *nuevo_nodo; struct persona *nodo_aux; if(nuevo_nodo != NULL){ nodo_aux = *lista; while(nodo_aux->siguiente != NULL) nodo_aux = nodo_aux->siguiente; nodo_aux->siguiente=nuevo_nodo; nuevo_nodo->siguiente=NULL; LEE_CAD(nuevo_nodo->nom,T_NOM); } else } ///////////////////////////////////////////////////////////////////////////////// struct persona *buscar_nodo(struct persona **lista){ struct persona *nodo_aux, *resultado; char nom[100]; char edad[3]; int encontrado = 0; nodo_aux = *lista; while((nodo_aux->siguiente != NULL) && (!encontrado)){ encontrado = 1; else nodo_aux = nodo_aux->siguiente; } if((nodo_aux->siguiente == NULL) && (!encontrado)) encontrado = 1; if(encontrado) resultado = NULL; return(resultado); } //////////////////////////////////////////////////////////////////////////////// void borrar_nodo(struct persona **lista){ struct persona *nodo_aux, *nodo_anterior; char nom[100]; char edad[3]; int encontrado = 0; nodo_aux = *lista; *lista=nodo_aux->siguiente; else{ nodo_anterior = nodo_aux; nodo_aux = nodo_aux->siguiente; while((nodo_aux->siguiente != NULL) && (!encontrado)){ encontrado = 1; else{ nodo_anterior = nodo_aux; nodo_aux = nodo_aux->siguiente; } } if((nodo_aux->siguiente == NULL) && (!encontrado)) encontrado = 1; if(encontrado){ nodo_anterior->siguiente = nodo_aux->siguiente; } } } /////////////////////////////////////////////////////////////////////////////// void alta_despues_de(struct persona **lista){ struct persona *nuevo_nodo; struct persona *nodo_aux; char nom[100]; char edad[3]; int encontrado = 0; if(nuevo_nodo != NULL){ nodo_aux = *lista; while((nodo_aux->siguiente != NULL) && (!encontrado)){ encontrado = 1; else{ nodo_aux = nodo_aux->siguiente; } } if((nodo_aux->siguiente == NULL) && (!encontrado)) encontrado = 1; if(encontrado){ nuevo_nodo->siguiente=nodo_aux->siguiente; nodo_aux->siguiente=nuevo_nodo; } else{ } } }