typedef struct nodoagenda{
int dni;
char nombre[15];
char apellidos[25];
char direccion[30];
struct nodoagenda *ant;
struct nodoagenda *sig;
}nodoagenda;
void CrearAgenda(nodoagenda *(&));
int AgendaVacia(nodoagenda *);
int AgendaLlena(nodoagenda *);
int EstaElementoAgenda(nodoagenda *,int);
void InsertarAgenda(nodoagenda *(&));
void EliminarElementoAgenda(nodoagenda *(&));
void MostrarInversoAgenda(nodoagenda *);
void BorrarAgenda(nodoagenda *(&));
void GuardarAgenda(nodoagenda *);
void LeerAgenda(nodoagenda *listad);
//
void CrearAgenda(nodoagenda *(&listad))
{
listad = NULL;
}
/*****************************************************************************************/
int AgendaVacia(nodoagenda *listad)
{
int dev = 0;
if (listad==NULL)
dev = -1;
return dev;
}
/*****************************************************************************************/
// Controlaremos la memoria en la insercion de elementos en la lista
int AgendaLlena(nodoagenda *)
{
return 0;
}
/*****************************************************************************************/
// Devuelve -1 si el elemento esta en la lista. 0 en caso contrario
int EstaElementoAgenda(nodoagenda *listad,int dni)
{
nodoagenda *Paux;
int res;
Paux = listad;
while ((Paux != NULL)&&(Paux->dni != dni))
Paux = Paux->sig;
if (Paux == NULL)
res = 0;
else
res = -1;
return res;
}
/*****************************************************************************************/
void InsertarAgenda(nodoagenda *(&listad))
{
nodoagenda *Nuevonodo, *Paux;
int dni;
char nombre[15],apellidos[25];
Nuevonodo
= (nodoagenda
*)malloc(sizeof(nodoagenda
)); if (Nuevonodo == NULL)
printf("nSe produjo un error en la creación del elemento."); else
{
do{
}while((dni < 1)||(EstaElementoAgenda(listad,dni)));
Nuevonodo->dni = dni;
fflush(stdin
); //Borra el buffer de teclado printf("Introduce el nombre: "); printf("Introduce los apellidos: "); gets(Nuevonodo
->apellidos
); printf("Introduce la direccion: "); gets(Nuevonodo
->direccion
); Nuevonodo->sig = NULL;
Nuevonodo->ant = NULL;
if (AgendaVacia(listad))
listad = Nuevonodo;
else
{
if (dni > listad->dni)
{
Nuevonodo->sig = listad;
listad->ant=Nuevonodo;
listad = Nuevonodo;
}
else
{
Paux = listad;
while (((Paux->sig)!=NULL)&&((dni < Paux->sig->dni)))
Paux = Paux->sig;
if (Paux->sig != NULL) //Si no es el ultimo nodo
Paux->sig->ant=Nuevonodo;
Nuevonodo->sig = Paux->sig;
Nuevonodo->ant = Paux;
Paux->sig = Nuevonodo;
}
}
}
}
/*****************************************************************************************/
void EliminarElementoAgenda(nodoagenda *(&listad),int dni)
{
nodoagenda *actual = listad;
while (actual->dni != dni)
actual = actual->sig;
if (actual->ant == NULL) // Es el primer nodo de la lista
{
if (actual->sig!=NULL) // Hay mas de un nodo en la lista
actual->sig->ant=NULL;
listad=actual->sig;
}
else
{
if (actual->sig!=NULL) // Es el ultimo nodo de la lista
actual->sig->ant=actual->ant;
actual->ant->sig=actual->sig;
}
}
/*****************************************************************************************/
void MostrarInversoAgenda(nodoagenda *listad)
{
nodoagenda *paux=listad;
if (paux != NULL)
{
// Recorremos toda la lista hasta el final
while (paux->sig != NULL)
paux=paux->sig;
// Recorremos toda la lista en orden inverso hasta el primer nodo
while (paux != NULL)
{
printf("nnDNI: %d",paux
->dni
); printf("nNombre: %s",paux
->nombre
); printf("nApellidos: %s",paux
->apellidos
); printf("nDireccion: %s",paux
->direccion
); paux=paux->ant;
}
}
}
/*****************************************************************************************/
void BorrarAgenda(nodoagenda *(&listad))
{
nodoagenda *paux;
while (listad != NULL)
{
paux=listad;
listad=listad->sig;
}
}
/*****************************************************************************************/
void GuardarAgenda(nodoagenda *listad)
{
nodoagenda *paux=listad;
FILE*pFile;
if (paux != NULL)
{
// Recorremos toda la lista hasta el final
while (paux->sig != NULL)
paux=paux->sig;
pFile
= fopen ( "amigos.txt" , "wb" );//abrir fichero
if(pFile== NULL)
puts ("nError guardando el fichero."); else
{
// Recorremos toda la lista en orden inverso hasta el primer nodo
while (paux != NULL)
{
fwrite(&paux
, sizeof paux
, 1, pFile
); printf("nnDNI: %d",paux
->dni
); printf("nNombre: %s",paux
->nombre
); printf("nApellidos: %s",paux
->apellidos
); printf("nDireccion: %s",paux
->direccion
); paux=paux->ant;
}
printf( "Fichero Guardadon" ); else
printf( "Error: Fichero NO Guardadon" ); }
}
}
/*****************************************************************************************/
void LeerAgenda(nodoagenda *listad)
{
nodoagenda *Nuevonodo;
FILE
*file
= fopen("amigo.txt", "rb");
if ( file != NULL )
{
}
}