#include <iostream.h>
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <conio.c>
#include <iomanip.h>
 
struct Nodo{
 
int datos;
Nodo *sgte;
 
};
 
 
 
void inserta_inicio(Nodo **cab,int dato1);
void crea_final(Nodo **cab);
 
void salvar_lista(Nodo **cab);
void recupera_lista(Nodo **cab);
 
void muestra_lista(Nodo **cab);
 
int main()
{ Nodo *L=NULL,*M=NULL;
 
 
      crea_final(&L);
      salvar_lista(&L);
      recupera_lista(&L);
      muestra_lista(&L);
 
      system("PAUSE");
      return 0;
}
 
void crea_final(Nodo **cab){
 
  Nodo *Q,*T;
  int valor,i=1,n,dat;
 
    Q=(Nodo*)malloc(sizeof(Nodo));
 
    printf("Ingrese valor del primer nodo: ");
    cin>>valor;
 
    Q->datos=valor;
    Q->sgte=NULL;
    *cab=Q;
    T=*cab;
 
    printf("Ingrese numero de nodos a crear ");
    cin>>n;
 
    while(i<=n){
 
       Q=(Nodo*)malloc(sizeof(Nodo));
       printf("Ingrese dato: ");
       cin>>dat;
       Q->datos=dat;
       Q->sgte=NULL;
       T->sgte=Q;
       T=Q;
       i++;
    }
 
}
 
 
 void salvar_lista(Nodo **cab){
 
     Nodo *Q;
     FILE *B;
     int sw=0;
     B=fopen("prav","w");
     if(B==NULL){
           cout<<"No se puede abrir el archivo"<<endl;
     }
     Q=*cab;
 
     while(Q!=NULL){
               fwrite(Q,sizeof(Nodo),1,B);
               Q=Q->sgte;
               sw=1;
          }
          if(sw){
          cout<<"Lista salvada"<<endl;
          }
          else{
          cout<<"Lista vacia"<<endl;
          }
          fclose(B);
 
}
 
void recupera_lista(Nodo **cab){
 
     Nodo *R;
     FILE *B;
     int sw=0;
     B=fopen("prav","r");
 
     if(B==NULL){
          cout<<"Archivo no encontrado...";
     }
     *cab=NULL;
      while(!feof(B)){
         R=(Nodo*)malloc(sizeof(Nodo));
         if(R==NULL){
              cout<<"No hay memoria"<<endl;
         }
         if(fread(R,sizeof(Nodo),1,B)!=1)
             break;
         inserta_final(&cab,R);
         sw=1;
     }
     if(sw){
     cout<<"Lista recuperada "<<endl;
     }
     else{
     cout<<"Lista vacia"<<endl;
     }
 
     fclose(B);
}
 
void inserta_final(Nodo **cab,int dato1){
 
   Nodo *Q,*T;
   if(*cab==NULL){
      Q=(Nodo*)malloc(sizeof(Nodo));
      Q->datos=dato1;
      Q->sgte=NULL;
      *cab=Q;
      }
      else{
         T=*cab;
         while(T->sgte!=NULL){
            T=T->sgte;
         }
         Q=(Nodo*)malloc(sizeof(Nodo));
         Q->datos=dato1;
         Q->sgte=NULL;
         T->sgte=Q;
      }
}