Título: Ayuda con listas en c Publicado por: thorniton en 10 Noviembre 2015, 17:43 pm no me recorre el apuntador en la funcion borrar, alguien que me pueda ayudar?
mi codigo es este: #include<stdio.h> #include<stdlib.h> #include<string.h> struct lista{ // Aqui se declara la estructura que tiene cada nodo de la lista char nombres[30]; // Este campo es para datos struct lista *ap_sgte_nodo; // Este es el apuntador al nodo siguiente }; typedef struct lista nodo; // Y se define el tipo de dato como nodo void menu() // Esta funcion contiene el encabezado y el mneu del sistema { puts(""); puts("*****************************************"); puts("Este programa crea una lista de nombres"); puts("1. Crear la lista"); puts("2. Insertar nombre"); puts("3. Borrar nombre"); puts("4. Salir"); puts("****************************************"); } void llenar(nodo *direccion) { puts("Teclea el nombre a agregar en lista, para terminar la lista teclea FIN "); fflush(stdin); scanf("%s",direccion->nombres); if(strcmp(direccion->nombres,"FIN")==0) { direccion->ap_sgte_nodo=NULL; } else { direccion->ap_sgte_nodo=(nodo*)malloc(sizeof(nodo)); llenar(direccion->ap_sgte_nodo); } return; } void desplegar(nodo *direccion) { if(direccion->ap_sgte_nodo != NULL) { printf("%s \n",direccion->nombres); desplegar(direccion->ap_sgte_nodo); } return; } nodo *insertar(nodo *direccion) { nodo *buscar(nodo *, char []); nodo *aptr_aux; nodo *nuevo_registro; char d_anterior[30]; char nuevo_dato[30]; puts("Teclea el nuevo dato"); fflush(stdin); scanf("%s",nuevo_dato); puts("Colocar antes del dato:"); fflush(stdin); scanf("%s",d_anterior); if(strcmp(direccion->nombres,d_anterior) == 0) { nuevo_registro = (nodo *)malloc(sizeof(nodo)); strcpy(nuevo_registro->nombres,nuevo_dato); nuevo_registro->ap_sgte_nodo = direccion; direccion = nuevo_registro; } else { aptr_aux = buscar(direccion, d_anterior); if(aptr_aux == NULL) puts("No existe este dato en la lista"); else { nuevo_registro = (nodo *)malloc(sizeof(nodo)); strcpy(nuevo_registro->nombres,nuevo_dato); nuevo_registro->ap_sgte_nodo = aptr_aux->ap_sgte_nodo; aptr_aux->ap_sgte_nodo = nuevo_registro; } } return direccion; } nodo *buscar(nodo *aptr_b, char d_buscar[]) //Declaracion de la funcion de busqueda { if(strcmp(aptr_b->ap_sgte_nodo->nombres,d_buscar) == 0) //Verificar si en el primer nodo esta el dato buscado return(aptr_b); //Si es asi, regersar el apuntador else if(aptr_b->ap_sgte_nodo->ap_sgte_nodo == NULL) //Sino verificar si se esta en el ultimo nodo return(NULL); //Si es asi regresar null else buscar(aptr_b->ap_sgte_nodo, d_buscar); //Sino continuar la busqueda } nodo *borrar(nodo *direccion) { nodo *buscar(nodo *,char []); //Declaraci?n de la funcion buscar nodo *ap_aux; //Apuntador auxiliar char nombre_borrar[30]; //Arreglo para guardar el dato a borrar nodo *temporal; puts("Teclea el nombre a borrar"); //Solicita el nombre a borrar scanf("%s",nombre_borrar); //Recibe el nombre a borrar if(strcmpi(direccion->nombres,nombre_borrar) == 0) //Verifica si es el primer dato { temporal = direccion->ap_sgte_nodo; //Si lo es guarda su apuntador al nodo siguiente en temporal free(direccion); //Libera la memoria utilizada direccion = temporal; //El apuntador inicial se le asigna el nodo siguiente } else { ap_aux = buscar(direccion,nombre_borrar); //Sino invoca la funcion buscar y asigna a nodo_aux la direccion buscada if(ap_aux == NULL) //Si la funcion buscar regresa un nulo signiifica que el dato no esta en la lista puts("Este nombre no se encuentra en la lista"); else temporal = ap_aux->ap_sgte_nodo->ap_sgte_nodo; //Sino avanza al siguiente nodo free(ap_aux->ap_sgte_nodo); //Libera ese nodo ap_aux->ap_sgte_nodo = temporal; //Y asignale la direccion del nodo anterior } return direccion; //Regresa al apuntador a primero } int main() // Declaracion de la funcion principal { int continua=0; // Variables para: mantener el ciclo de operacion int opcion; // opciones del menu nodo *inicio; // Variable de apuntador tipo estructura para ubicar el inicio de la lista while(continua==0) { menu(); puts(""); puts("Teclea la opcion que desees:"); fflush(stdin); scanf("%d",&opcion); switch(opcion) { case 1: inicio=(nodo*)malloc(sizeof(nodo)); llenar(inicio); desplegar(inicio); puts("Termina crear lista"); break; case 2: insertar(inicio); puts(""); puts("Lista actualizada:"); desplegar(inicio); break; case 3: borrar(inicio); puts(""); puts("Lista actualizada"); desplegar(inicio); break; case 4: puts("Saliendo..."); exit(0); } } } Título: Re: Ayuda con listas en c Publicado por: furciorifa en 10 Noviembre 2015, 20:44 pm strcmpi no existe es strcmp y creo que es el único error , ya lo compile y corrió bien, es una cochinada tú código , deberías indentarlo, otra cosa utiliza las etiquetas GesHi para poner código , ya que es ilegible de esta manera.
|