Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/10/2009, 12:50
metal_boy
 
Fecha de Ingreso: octubre-2009
Mensajes: 39
Antigüedad: 15 años, 3 meses
Puntos: 0
Problema con listas circulares doblemente enlazadas

Pues tengo un problema estoy haciendo una pratica, pero no me queda tengo un problemita el problema es a la hora de imprimir mi lista circular les dejare el codigoo:

Lo que hace el programa es insertar estructuras de tipo alumno en mi lista circular:

Código:
typedef struct persona
{
    char  nombre[20];  
    char  apellido[20]; 
    int edad;
    float sueldo;
} item;

typedef struct NodoLC
{
    item dato;
    struct NodoLC *siguiente;
} NODOLC;
Y luego ingreso los datos en otra funcion:

Código:
void ingresar()
{
    system("CLS");
    printf("Nuevo registro de alumno creado:\n\n");
    item *alumno;
        
    alumno=(item*)malloc(sizeof(item));
    alumno->nombre=(char*)malloc(30*sizeof(char));
    alumno->apellido=(char*)malloc(30*sizeof(char));
    
    printf("Nombre: ");
    gets(alumno->nombre);
    
    printf("\n\nApellido: ");
    gets(alumno->apellido);
    
    printf("\n\nBoleta: ");
    scanf("%d",&alumno->boleta);
    
    printf("\n\nCalificacion: ");
    scanf("%d",&alumno->calif);
    
    insertarDLC(&cab,alumno);
    free(alumno);
}
y mis funciones de insertar e imprimir respectivamente:
Código:
void insertarDLC(NODODLC **cab,item *elem)
{
    NODODLC *aux=(NODODLC*)malloc(sizeof(NODODLC));
    
    aux->dato.nombre=elem->nombre;
    aux->dato.apellido=elem->apellido;
    aux->dato.boleta=elem->boleta;
    aux->dato.calif=elem->calif;
    
    aux->sig=aux->ant=aux;
    aux->sig=*cab;
    
    if(*cab)
    {
      aux->sig=(*cab)->sig;
      (*cab)->sig=aux;
    }
    
    *cab=aux;
}
Código:
void imprimirDLC(NODODLC *cab)
{
    NODODLC *ptr=cab;
    int contador=1;
     
    if(cab==NULL)
    {
        printf("La lista esta vacia");
        return;
    }
    
    for(; ptr;ptr=ptr->sig,contador++)
    {
       printf("%d.-",contador);
       printf("\tNombre: %s \n",ptr->dato.nombre);
       printf("\tApellido: %s \n",ptr->dato.apellido);
       printf("\tBoleta: %d \n",ptr->dato.boleta);
       printf("\tCalificacion: %d \n",ptr->dato.calif);
    }    
}
Espero alguien me pueda ayudar gracias!!!!