Código
#include <stdio.h> #include <stdlib.h> #include <string.h> #include<stdbool.h>// booleanos //Estructura Persona struct nodoPersona{ int cedula; char *nombre; struct nodoPersona *ptrSiguienteNodoPersona; }; //Sinonimos para Persona typedef struct nodoPersona Persona; typedef Persona *ptrNodoPersona; //Prototipos de funciones void insertarNodoPersona(ptrNodoPersona *nodoPersona, int pCedula, char *pNombre); void imprimeListaPersonas(ptrNodoPersona nodoInicial); ptrNodoPersona buscarPersonaPorCedula(ptrNodoPersona listaDePersonas, int pCedula); void eliminarNodoPersona(ptrNodoPersona *listaNodosPersona, int pCedula); void modificarNodoPersona(ptrNodoPersona *listaNodosPersona, int pCedula); int main(void){ int Opcion=1; int cont=0; //do{ ptrNodoPersona nodoInicial = NULL; //scanf("%s", &Opcion); insertarNodoPersona(&nodoInicial, 354488552, "Juan Camacho"); insertarNodoPersona(&nodoInicial, 312578852, "Juanito Salas"); insertarNodoPersona(&nodoInicial, 995512233, "Sandra Maroto"); insertarNodoPersona(&nodoInicial, 884526568, "Luis Hernandez"); imprimeListaPersonas(nodoInicial); // int i; //eliminarNodoPersona(&nodoInicial, 500340876); //scanf("%s",); while (Opcion != 0){ int cedulaBuscar = 0; char Nombre [50]; if(buscarPersonaPorCedula(nodoInicial, cedulaBuscar) != NULL) { printf("La persona con nombre %s se encuentra en la lista \n", buscarPersonaPorCedula(nodoInicial, cedulaBuscar)->nombre); }else{ insertarNodoPersona (&nodoInicial, cedulaBuscar, Nombre); //ingresa el dato que es ingresado por el usuario junto con la cedula imprimeListaPersonas(nodoInicial); //++cont; } //getch(); //return 0; }//Fin de la funcion main //exit(0); } //Inserta Nodos de Persona void principal (){ } void insertarNodoPersona(ptrNodoPersona *nodoPersona, int pCedula, char *pNombre){ ptrNodoPersona ptrNuevo; ptrNodoPersona ptrAnterior; ptrNodoPersona ptrActual; if(ptrNuevo != NULL){ ptrNuevo->cedula = pCedula; //-> //strcpy(ptrNuevo.nombre, pNombre); ptrNuevo->nombre = pNombre; ptrAnterior = NULL; ptrActual = *nodoPersona; while(ptrActual != NULL && pCedula > ptrActual->cedula){ ptrAnterior = ptrActual; ptrActual = ptrActual->ptrSiguienteNodoPersona; }//Fin del while acomodo por numero de cedula if(ptrAnterior == NULL){ ptrNuevo->ptrSiguienteNodoPersona = *nodoPersona; *nodoPersona = ptrNuevo; } else{ ptrAnterior->ptrSiguienteNodoPersona = ptrNuevo; ptrNuevo->ptrSiguienteNodoPersona = ptrActual; } }//Fin de if de memoria disponible else{ printf("No se puede insertar la persona con la cedula %d por falta de memoria en el sistema. \n", pCedula); }//Fin de else no hay memoria disponible }//Fin de la funcion insertarNodoPersona void imprimeListaPersonas(ptrNodoPersona nodoInicial){ if(nodoInicial == NULL){ }//Fin del if lista vacia else{ while(nodoInicial != NULL){ nodoInicial = nodoInicial->ptrSiguienteNodoPersona; }//Fin del while que recorre la lista }//Fin del else la lista no esta vacia }//Fin de la funcion imprimeListaPersonas ptrNodoPersona buscarPersonaPorCedula(ptrNodoPersona listaDePersonas, int pCedula){ ptrNodoPersona ptrPersona = NULL; if(listaDePersonas == NULL){ }// Fin de if lista vacia else{ while(listaDePersonas != NULL){ if(listaDePersonas->cedula == pCedula){ ptrPersona = listaDePersonas; }//Fin del while listaDePersonas = listaDePersonas->ptrSiguienteNodoPersona; }//Fin del while de busqueda }// Fin del else si hay datos en la lista return ptrPersona; }// Fin de la funcion buscarPersonaPorCedula void eliminarNodoPersona(ptrNodoPersona *listaNodosPersona, int pCedula){ ptrNodoPersona ptrAnterior; ptrNodoPersona ptrActual; ptrNodoPersona ptrTemporal; //Elimina el primer nodo if(pCedula == (*listaNodosPersona)->cedula){ ptrTemporal = *listaNodosPersona; *listaNodosPersona = (*listaNodosPersona)->ptrSiguienteNodoPersona; }//Fin del if primer nodo else{ ptrAnterior = *listaNodosPersona; ptrActual = (*listaNodosPersona)->ptrSiguienteNodoPersona; while(ptrActual != NULL && ptrActual->cedula != pCedula){ ptrAnterior = ptrActual; ptrActual = ptrActual->ptrSiguienteNodoPersona; }//Fin del while de busqueda //Elimina el nodo Actual if(ptrActual != NULL){ ptrTemporal = ptrActual; ptrAnterior->ptrSiguienteNodoPersona = ptrActual->ptrSiguienteNodoPersona; }//Fin del if de eliminar else{ }//Fin del else no se elimino }//Fin de else para eliminar cualquier otro nodo }//Fin de la funcion eliminarNodoPersona void modificarNodoPersona(ptrNodoPersona *listaNodosPersona, int pCedula){ ptrNodoPersona ptrActual; ptrActual = *listaNodosPersona; while(ptrActual != NULL){ if(ptrActual->cedula == pCedula) ptrActual->nombre = "El nombre asignado"; ptrActual = ptrActual->ptrSiguienteNodoPersona; }//Fin del while de busqueda }//Fin de la funcion modificarNodoPersona
MOD: Etiqueta GeSHi