miércoles, 8 de junio de 2011

Lista Enlazada Doble

/*Completa el código de la función
mostrar_lista_inversa() para que reciba un
puntero al último elemento de la lista y
la muestre por pantalla desde el último al
primer elemento, es decir, en orden inverso

*/
#include<stdio.h>

/*typedef struct{
char nombre[30];
   int edad;
   registro *siguiente;      
}registro; *///ESTO ES IMPOSIBLE


struct elemento_lista{
   char nombre[30];
   int edad;
   struct elemento_lista *siguiente;
   struct elemento_lista *anterior;      
};
//Defino un nuevo tipo de dato al que llamare
//nodo
typedef struct elemento_lista nodo;
void mostrar_lista_inversa(nodo *final){

}
void mostrar_lista(nodo *principio){
     nodo *registro;
     registro=principio;
     int cont=1;
     char seguir='s';
     printf("\n****CONTENIDO DE LA LISTA DE MIS AMIGOS****");
     do{
       printf("\nAMIGO %d",cont++);
       printf("\nNombre: %s",registro->nombre);
       printf("\nEdad: %d",registro->edad);
       if(registro->siguiente!=0)
          registro=registro->siguiente;                      
       else{
          printf("\nFIN DE LA LISTA");
          seguir='n';
       }
     }while(seguir=='s');
    
     return;          
}
nodo *enlazar_lista(nodo *principio){
      int cont=1;
      char seguir='s';
      nodo *registro, *aux_anterior,*final;
      registro=principio;
      aux_anterior=0;
     do{
       printf("\n***Amigo %d***",cont++);
       printf("\nNombre: ");
       scanf(" %[^\n]",registro->nombre);
       printf("\nEdad: ");
       scanf("%d",&registro->edad);
       printf("\nDeseas tener un nuevo amigo (s/n): ");
       scanf(" %c",&seguir);
       if(seguir=='s')
           registro->siguiente=(nodo *)malloc(1*sizeof(nodo));
       else{
           final=registro;
           registro->siguiente=0;
           printf("\nLista enlazada finalizada");
       }
       registro->anterior=aux_anterior;
       aux_anterior=registro;
       registro=registro->siguiente;
     }while(seguir=='s');        
     return(final);        
}
main(){
     nodo *registro,*principio,*final;
     registro=(nodo *) malloc(1*sizeof(nodo));
     principio=registro;
     final=enlazar_lista(principio);
     mostrar_lista(principio);
     mostrar_lista_inversa(final);
     getchar();
     getchar();
}

No hay comentarios:

Publicar un comentario