Foros > C++: Lista doble enlazada codigo

  1. cabuj

    Mensajes [1] - Enviado el Martes 02 de Setiembre de 2008 a las 16:30hs

    Buenas


    En la facu me pidieron hacer este TP


    Se dispone de una lista enlazada doble cuyos nodos tienen el siguiente dise?o:
    Numero de Vuelo(entero)
    Pasajes disponibles (entero)
    Puntero al anterior y al sisguiente.
    Escriba una funcion que recibiendo el puntero al primero y al ultimo nodos de la lista, elimine los nodos en los que los pasajes disponibles son iguales a 0. Escriba el main para invocar a la funcion.


    yo tengo echo esto,


    #include
    #include
    #include
    struct pasajes {int vuelo;
    int npasaje;};

    struct nodo {struct nodo *ant;
    struct pasajes datos;
    struct nodo *sigui;};


    int listavacia (struct nodo *);
    struct nodo *nuevonodo ();
    struct nodo *creadoble (struct nodo *, struct nodo **, struct pasajes);
    void vernodo (struct nodo *);
    void reves (struct nodo*);
    void borranodo (struct nodo **, struct nodo **,int ); //int o long?

    void borranpasajes (struct nodo *,int);

    //************************************************** ***************
    //************************************************** ***************
    void main()
    { struct nodo *ultimo=NULL, *primero=NULL;
    struct pasajes x;
    long d;
    clrscr();
    printf ("Ingrese Vuelo (0 para finalizar):");
    scanf ("%d",&x.vuelo);
    while (x.vuelo)
    {
    printf ("Ingrese Pasaje:");
    scanf("%d",&x.npasaje);
    ultimo=creadoble (ultimo,&primero,x);
    printf ("Ingrese Vuelo (0 para finalizar):");
    scanf ("%d",&x.vuelo);
    }
    if (listavacia (primero))
    { clrscr();
    printf ("No se ingresaron datos");
    getch ();exit(0);}
    else
    {vernodo (primero);
    reves (ultimo);






    while (primero &&d)
    {borranodo (&primero,&ultimo,d);
    vernodo (primero) ; reves (ultimo);


    }

    getch();
    }
    }
    int listavacia (struct nodo *p)
    {return (p==NULL);}

    struct nodo *nuevonodo()
    {struct nodo *p=(struct nodo *) malloc (sizeof (struct nodo));
    if (p==NULL)
    {printf ("Memoria Insuficiente"); getch();exit(0);}
    return p;
    }
    struct nodo *creadoble (struct nodo *ult, struct nodo **pri, struct pasajes x)
    { struct nodo *p;
    p= nuevonodo ();
    p->datos=x;
    if (listavacia (ult))
    {p-> sigui=NULL;
    p->ant=NULL;
    ult=p;
    *pri=p;
    }
    else
    {p-> ant=ult;
    p->sigui=NULL;
    ult-> sigui=p;
    ult =p;
    }
    return ult;
    }

    void vernodo (struct nodo *p)
    {while (p)
    {printf("vuelo:%d, npasaje:%d
    ",p->datos.vuelo, p->datos.npasaje);
    p=p->sigui;
    }
    }

    void reves (struct nodo *p)
    {while (p)
    {printf("vuelo:%d, npasaje:%d
    ",p->datos.vuelo, p->datos.npasaje);
    p=p->ant;
    }
    }


    void borranodo (struct nodo **pri, struct nodo**ult, int d) //long o int??
    {struct nodo *anterior, *actual, *aux;
    anterior=actual=*pri;
    while (actual&&d!=actual->datos.npasaje)
    {anterior=actual;
    actual=actual->sigui;}
    if (actual==NULL)
    {printf("Pasaje Inexistente
    ");
    getch();}
    else
    {
    if (anterior==actual) //borra el primero
    {actual=actual->sigui;
    if (actual!=NULL)
    actual->ant=NULL;
    else
    *ult=NULL;
    *pri=actual;
    free(anterior);
    }
    else
    if (actual->sigui==NULL) //borra el ultimo
    {*ult=anterior;
    anterior->sigui=NULL;
    free(actual);
    }
    {anterior->sigui=actual->sigui;
    aux=actual->sigui;
    aux->ant=anterior;
    free(actual);
    }
    }
    }


    ?pero le falta el IF con la pregunta si los pasajes son 0 y la ordenacion para borrar ya sea al principio de la lista, al medio , o al final, estoy hace una mes ya y?no lo puedo hacer y lo tengo que entregar el Lunes, por favor si alguien sabe donde va el IF y el codigo de como hacerlo, MUCHAS GRACIAS.


responder

Para poder responder a este tema tenes que ingresar. Si no tenes una cuenta podes registrarse gratis..

publicidad

API DE FACEBOOK
GOOGLE CALENDAR API
GOOGLE MAPS API