/************** funcion para reservar memoria para el nuevo elemento*/
struct listaDoble *nuevoElemento()
{
struct listaDoble *a;
a = (struct listaDoble*)malloc(sizeof(struct listaDoble));
return a;
}
/*********** funcion que calcula si la lista esta vacia**************/
int listaVacia(struct listaDoble*cabeza)
{
if(cabeza == NULL) /*la lista esta vacia*/
return 1;
else
return 0; /*la lista no esta vacia*/
}
void leerDatosFichero(char *fichero, struct listaDoble **cabeza)
{
FILE *p;
struct listaDoble *aux;
/*se reserva espacio para el nuevo elemento*/
aux = nuevoElemento();
p = fopen("conejos2006.bin", "rb");
if(p== NULL)
{
printf("\nError de lectura del fichero\n");
exit(-1);
}
while(fscanf(p, "%s %d %lf", aux->codigo, &aux->edad, &aux->peso)==3)
{
insertarLista(cabeza, aux->codigo, aux->edad, aux->peso);
}
fclose(p);
}
/************funcion que inserta elementos al comienzo de la lista*/
void insertarLista(struct listaDoble **cabeza, char *codigo, int edad, double peso)
{
struct listaDoble *nuevo = NULL;
struct listaDoble *aux = NULL;
/*se reserva espacio para el nuevo elemento*/
nuevo = nuevoElemento();
strcpy(nuevo->codigo, codigo);
nuevo->edad = edad;
nuevo->peso = peso;
if(listaVacia(*cabeza))
{
*cabeza = nuevo;
nuevo->sig = NULL;
nuevo->anterior = NULL;
}
else {
aux = *cabeza;
nuevo->sig = aux;
aux->anterior = nuevo;
*cabeza = nuevo;
}
}
/*****************muestra los elementos de la lista desde el principio hasta el fin***/
void visualizarDirecta(struct listaDoble *cabeza)
{
if(!listaVacia(cabeza))
{
printf("\n Codigo: %s\n", cabeza->codigo);
printf(" Edad: %d\n", cabeza->edad);
printf(" Peso: %.3lf\n", cabeza->peso);
visualizarDirecta(cabeza->sig);
}
}
/****************funcion que comprueba si existe un fichero***/
int existeFichero()
{
FILE *f;
f = fopen("conejos2006.bin", "rb"); /*abre fichero para lectura*/
if(f == NULL) /*el fichero no existe*/
{
return 0;
}
else {
fclose(f);
return 1;
}
}
[QUOTE]
Aqui pongo el principal es decir el main.
[/QUOTE]