C/Visual C - ¿Hacer a un puntero de lista apuntar a una cola?

   
Vista:

¿Hacer a un puntero de lista apuntar a una cola?

Publicado por Álvaro Fallas Zúñiga (2 intervenciones) el 01/12/2010 18:29:56
Hola!! Espero que estén bien!! Estoy haciendo un proyecto para la U y necesito hacer una lista enlazada. Cada nodo de la lista representa un vehículo con sus datos!(placa, marca y esas cosas) Los vehículos pertenecen a una empresa de entrega de paquetes. Cada vehículo tiene una lista de paquetes que entregar, por lo tanto cada nodo de la lista enlazada debe tener asociada una cola que es donde se guardan los paquetes que debo entregar! Hice la lista enlazada con dos punteros, uno al nodo siguiente y otro que apunte al inicio de la cola. Esto lo hice así:
listaEnlazada->sgte=NULL; (este es el q apunta al nodo siguiente no me da problema)
listaEnlazada->punteroACola=ColaN(este es el q me da problema, colaN es el nombre de la cola)
A la hora de hacer este último (el puntero de la lista que apunta al inicio de la cola) me da un error, específicamente el error es: cannot convert 'listaPaquetes**'to'listaVehiculos*' siendo listaPaquetes el nombre del struct de la cola y listaVehiculos el nombre del struct de la lista enlazada.
También intenté pasando la dirección de memoria de la siguiente forma:
listaEnlazada->punteroACola=&ColaN;
pero tampoco funcionó!!!!!!!!T_T
Sería genial si me señalaran en que es lo q me equivoco!!!!! Muchas gracias y saludos!!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:¿Hacer a un puntero de lista apuntar a una cola

Publicado por pepe (32 intervenciones) el 01/12/2010 19:36:32
La verdad es que trabajar con punteros no es nada facil, sobre todo cuando entran en juego diferentes tipos y estructuras que se asignan unas a otras.

El error nos dice que estamos asignando un doble puntero a un puntero simple, lo que quiere decir que ColaN es doble puntero y si no me equivoco ( que no lo tengo claro ) debemos pasar *ColaN.

Para estar más seguro necesitaría las estructuras y declaraciones de las variables que usas. Como te digo no es nada facil.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Hacer a un puntero de lista apuntar a una cola

Publicado por Alvaro Fallas (2 intervenciones) el 01/12/2010 19:47:00
T_T ya lloro!!!! Bueno este es el código que llevo hasta ahora!!!

#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
int contProceso=0;
int maximoVehiculos=5;

struct listaVehiculos
{
char id[5];
char marca[9];
int peso;
int capacidad;
char idChofer[5];
char nombre[9];
char apellido[9];
struct listaVehiculos *sgte;
struct listaVehiculos *ptrCola;

};
struct listaPaquetes
{
char idPaquete[5];
char idCliente[5];
char nCliente[10];
char descripcion[30];
int peso;
struct listaPaquetes *anter;
};
void incluirVehiculos(listaVehiculos* &lista, listaPaquetes* &cola)
{
char seguir='s';

struct listaPaquetes *colaN;
struct listaVehiculos *nuevo;
struct listaVehiculos *ptrActual;

do
{
if(contProceso<maximoVehiculos)
{
nuevo=(struct listaVehiculos*)malloc(sizeof(struct listaVehiculos));
colaN=(struct listaPaquetes*)malloc(sizeof(struct listaPaquetes));
clrscr();
cout<<"INGRESO DE TRANSPORTES"<<endl;
cout<<endl;
cout<<"Ingrese la placa del vehiculo: "<<endl;
gets(nuevo->id);
cout<<"Ingrese la marca del vehiculo: "<<endl;
gets(nuevo->marca);
cout<<"Ingrese el peso en toneladas del vehiculo: "<<endl;
cin>>nuevo->peso;
cout<<"Ingrese la capacidad en kilogramos:"<<endl;
cin>>nuevo->capacidad;
cout<<"Ingrese el id del chofer: "<<endl;
gets(nuevo->idChofer);
cout<<"Ingrese el nombre del chofer: "<<endl;
gets(nuevo->nombre);
cout<<"Ingrese el apellido del chofer:"<<endl;
gets(nuevo->apellido);
nuevo->sgte=NULL;

ptrActual=lista;


if(contProceso>=2)
{
while(ptrActual->sgte!=NULL)
{

ptrActual=ptrActual->sgte;
}
}

if(ptrActual!=NULL)
{
ptrActual->sgte=nuevo;
nuevo->sgte=NULL;
}
else
{
lista=nuevo;
nuevo->sgte=NULL;
}
contProceso++;
cout<<endl;
cout<<"¿Desea ingresar otro vehiculo? s/n (sí/no)"<<endl;
cin>>seguir;
}
else
{
cout<<"La empresa no dispone de más vehiculos"<<endl;
seguir='n';
cout<<"Presione cualquier tecla para continuar"<<endl;
getch();
}
}while(seguir=='s'||seguir=='S');

}
void InteriorLista(listaVehiculos* &lista)
{
struct listaVehiculos* ptrActual;

ptrActual=lista;
clrscr();

while(ptrActual!=NULL)
{
cout<< ptrActual->id<<" "<<endl;
cout<< ptrActual->marca<<" "<<endl;
cout<< ptrActual->peso<<" "<<endl;
cout<<endl;
ptrActual=ptrActual->sgte;

}
getch();

}

void main()
{

int opc=0;
struct listaVehiculos *lista;
struct listaPaquetes *cola;
cola=NULL;
lista=NULL;
do
{
clrscr();
cout<<" Entrega a Tiempo S.A"<<endl;
cout<<" Sistema de registro de entregas"<<endl;
cout<<endl;
cout<<endl;
cout<<" Menu Principal"<<endl;
cout<<" 1-Ingreso de datos de unidad de transporte"<<endl;
cout<<" 2-Consulta datos de unidad de transporte por id"<<endl;
cout<<" 3-Consulta de datos de unidad de transporte"<<endl;
cout<<" 4-Ingreso de entregas"<<endl;
cout<<" 5-Despacho de entregas"<<endl;
cout<<" 6-Consulta de cola por unidad de transporte"<<endl;
cout<<" 7-Salir"<<endl;
cout<<endl;
cout<<" Seleccione la tarea que desea llevar a cabo-> ";
cin>>opc;
switch(opc)
{
case 1:
incluirVehiculos(lista, cola);
break;

case 2:

break;

case 3:
InteriorLista(lista);
break;

case 4:

break;

case 5:

break;

case 6:

break;

case 7:

break;

default:

break;
}

}while(opc!=7);
}//main

muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar