• Sábado 14 de Diciembre de 2024, 13:40

Autor Tema:  Vector de Punteros - Multilista  (Leído 2934 veces)

Evgeni

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Vector de Punteros - Multilista
« en: Martes 8 de Septiembre de 2009, 17:14 »
0
Gente, necesito su ayuda:

1) Tengo una multilista, de la siguiente estructura:
   
   Vuelo 1 ----------------------------------> Vuelo 2
         * Pasajero 1 (con sus datos)           * Pasajero 1 (con sus datos)
         * Pasajero 2                                  
         * Pasajero n...                              

2) Un vector:
   
    Lu - Ma - Mi - Ju - Vi - Sa - Do

    Un vector que representa dias, entonces no entiendo como puedo hacer para meter Vuelo 1 y Vuelo 2 por ejemplo al Lunes, en la posicion 1 del vector se guardara una serie de vuelos que contiene Lunes, como lo puedo hacer? Se que se trata de un vector de punteros, pero no entiendo como puedo meter mi multilista al casillero 1 del vector.


Muchas gracias por sus ideas y ayuda!

ocelot_76

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Vector de Punteros - Multilista
« Respuesta #1 en: Miércoles 9 de Septiembre de 2009, 00:33 »
0
Seria de gran ayuda postear el enunziado del programa o se komentara k se ha de hacer concretamente si no es impossible ayudar

OuGi

Evgeni

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Vector de Punteros - Multilista
« Respuesta #2 en: Miércoles 9 de Septiembre de 2009, 20:18 »
0
Cita de: "ocelot_76"
Seria de gran ayuda postear el enunziado del programa o se komentara k se ha de hacer concretamente si no es impossible ayudar

OuGi


Ahi explico un poquito mas:

Es sencillo, es todo un tp practico grande, saque solo una partecita,

Tengo que tener un vector de punteros,

     LU  MA MI  JU  VI SA  DO
BS

Un vuelo o mas que va para buenos aires dias lu -> domingo.

Por cada dia tengo Vuelos, para Buenos Aires, cada vuelo tiene varios pasajeros, la estructura de vuelos, es una lista, y debajo de cada vuelo tengo pasajeros, entonces se hace una multilista, estos pasos ya los hice, lo que no entiendo como meter esto a un Vector, hice las funciones de la carga de multilista, y todo....pero como cargar todo esto en un vector, no entiendo.

Typedef struct vuelos
   {
   int nro_vuelo;
   int tot_lugares;
   int ocupados;
   struct pasajeros *abajo;
   struct vuelos *sig;
   } nodo_vuelos;

Typedef struct pasajeros
   {
   char nombre[15];
   long nro_pasaporte;
   long telefono;
   struct pasajeros *prox;
   } nodo_pasajeros;



Funcion, main, para cargar mi multilista:


#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#include <conio.h>

typedef struct vuelos
{
   int nro_vuelo;
   int tot_lugares;
   int ocupados;

   struct pasajeros *abajo;
   struct vuelos *sig;
}nodo_vuelos;

typedef struct pasajeros
{
    long nro_pasaporte;
   long telefono;

   struct pasajeros *prox;
}nodo_pasajeros;


void crear(nodo_vuelos *pt);
void mostrar(nodo_vuelos *pt);

void crear2(nodo_pasajeros *pt,int);
void mostrar2(nodo_pasajeros *pt);

int main()
{
    nodo_vuelos *primeroV;
    nodo_vuelos *auxV;
    nodo_pasajeros *primeroP;
    nodo_pasajeros *auxP;

    primeroV=(nodo_vuelos*)malloc(sizeof(nodo_vuelos));

    auxV=primeroV;

    crear(primeroV);

    mostrar(primeroV);
getch();
return 0;
}


void crear(nodo_vuelos *registro)
{
    int cont=0;

    printf("nPor favor, ingrese numero de vuelo (0 para terminar): ");
    scanf("%d",&registro->nro_vuelo);

    if(registro->nro_vuelo==0)
    {
        registro->nro_vuelo=0;
        registro->sig=NULL;
    }
    else
   {
        printf("Por favor, ingrese la cantidad de lugares: ");
        scanf("%d",&registro->tot_lugares);

        printf("Por favor, ingrese la cantidad de lugares ocupados: ");
        scanf("%d",&registro->ocupados);

        while(registro->tot_lugares<registro->ocupados)
        {
            printf("Por favor, ingrese la cantidad de lugares ocupados: ");
            scanf("%d",&registro->ocupados);
        }

        cont=registro->ocupados;

        registro->abajo=(nodo_pasajeros*)malloc(sizeof(nodo_pasajeros));
        crear2(registro->abajo,cont);

        registro->sig=(nodo_vuelos*)malloc(sizeof(nodo_vuelos));
        crear(registro->sig);
   }
}

void crear2(nodo_pasajeros *registro,int cont)
{
    if(cont==0)
    {
        registro->prox=NULL;
    }
    else
    {
        printf("n");
        printf("Por favor, ingrese el numero del pasaporte: ");
        scanf("%d",&registro->nro_pasaporte);

        printf("Por favor, ingrese el telefono del pasajero: ");
        scanf("%d",&registro->telefono);

        cont--;

        registro->prox=(nodo_pasajeros*)malloc(sizeof(nodo_pasajeros));
        crear2(registro->prox,cont);
   }
}

void mostrar(nodo_vuelos *registro)
{
    if (registro->sig!=NULL)
   {
      printf("nVuelo->%dn",registro->nro_vuelo);
      printf("-----------------------------n");
      printf("El total de lugares: %dn",registro->tot_lugares);
      printf("El total de ocupados: %dn",registro->ocupados);

       mostrar2(registro->abajo);
       mostrar(registro->sig);
    }
   return;
}

void mostrar2(nodo_pasajeros *registro)
{
    if(registro->prox!=NULL)
   {
       printf("-----------------------------n");
      printf("El numero del pasaporte: %dn",registro->nro_pasaporte);
      printf("El telefono: %dn",registro->telefono);

      mostrar2(registro->prox);
    }
   return;
}

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Vector de Punteros - Multilista
« Respuesta #3 en: Miércoles 9 de Septiembre de 2009, 20:36 »
0
Si entendí bien la lista de vuelos siempre es de 7 elementos (días de la semana), como no es probable que aumenten nuevos días a la semana  :) entonces puedes usar un arreglo estático de punteros a "vuelos" (que debería llamarse "vuelo" por que sólo almacena un vuelo, igual "pasajeros" debería llamarse "pasajero").

Asi que inicialmente puedes tener un puntero a un arreglo estático de 7 stucts "vuelo" que puedes reservar con un solo malloc.

Luego, para cada vuelo tendrías que ir agregando sus pasajeros uno a uno, con una funcion que reciba como parámetro un puntero a un struct "pasajero" ya definido y un doble puntero a un pasajero (esto para que la funcion pueda modificar el puntero en sí.)

Algo mas o menos asi:
Código: C
  1.  
  2. agregarPasajero(pasajero* datosDelPasajero, pasajero** lugarDeAlmacenamiento)
  3. {
  4.    if (NULL == (*lugarDeAlmacenamiento)))
  5.     {
  6.         (*lugarDeAlmacenamiento)) = datosDelPasajero;
  7.     }
  8.     else
  9.     {
  10.         agregarPasajero(datosDelPasajero, &((*lugarDeAlmacenamiento)->prox));
  11.        
  12.     }
  13. }
  14.  
  15.  

Evgeni

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Vector de Punteros - Multilista
« Respuesta #4 en: Miércoles 9 de Septiembre de 2009, 20:54 »
0
Miren esa imagen:


img246.imageshack.us/i/vec.jpg/

(pegenla en el navegador y enter)

No se puede hacer algo asi? En el vector guardar un puntero por ejemplo del dia LUNES que apunte a vuelo 1? Es posible hacer algo asi? Como declaro el vector? De tipo nodo?  :blink:  No entiendo.

Toda la parte de enlazes de vuelos y pasajeros, y carga ya esta OK.