C/Visual C - Listas problema

   
Vista:

Listas problema

Publicado por Agus (2 intervenciones) el 11/06/2009 02:02:00
ola tengo un gran problema y es que no puedo sacar este código doy de alta en una lista dentro de otra o busca pero al cambiar de una lista a otra perdere un puntero por ai que se me borran los nodos anteriores pero no soy capaz de sacarlo. le pongo el codigo mi problema esta en subir a tienda. nose si sera un poco lioso pero es que estoy desesperado de todas formas gracias

typedef struct nodoImei{
unsigned long info;
struct nodoImei *sig;
}NodoImei;

typedef struct movil{
char Marca[20];
int Modelo;
NodoImei *listaImeisTienda;
NodoImei *listaImeisAlmacen;// (como el codigo de barras)
float Precio;
float PrecioMaxiapoyo;
float PrecioMaxiapoyo60;

}Movil;

typedef struct nodoMovil{
Movil info;
struct nodoMovil *sig;
}NodoMovil;

int main(){

NodoMovil *moviles ,*telefonoBuscado=NULL;
moviles=NULL;
NodoImei *listaImeisTienda=NULL;
NodoImei *listaImeisAlmacen=NULL;
int modelo;
int RED;

int numMoviles,x=0;
printf("Cuantos moviles quiere registrar");
fflush(stdin);
scanf("%d",&numMoviles);
do{
altaMovil(&moviles);
x++;
}while(x<numMoviles);

system("PAUSE");
visualizarTodosMoviles(moviles);
system("PAUSE");
printf("Que modelo desea buscar?");
fflush(stdin);
scanf("%d",&modelo);
//Buscar el telefono que qieres.
telefonoBuscado=buscarTelefono(moviles,modelo);
visualizarUnMovil(telefonoBuscado);
system("PAUSE");
if(telefonoBuscado==NULL){
printf("No se ha encontrado");
}else{
subirATienda(&telefonoBuscado);
system("pause");
}//fin_else
return 0;
}//main

void altaMovil(NodoMovil **moviles){
Movil c;
NodoMovil *nuevo,*aux=NULL;
NodoImei *nueva=NULL;

int numTel,x=0;

system("cls");
//clrscr();

//recojo los datos
fflush(stdin);
printf(" Marca:");gets(c.Marca);
fflush(stdin);
printf(" Modelo:");scanf("%d",&c.Modelo);
fflush(stdin);

printf("Cuantos telefonos de este modelo quiere registrar");
scanf("%d",&numTel);

do{
altaImeis(&nueva);
if(x==0){
nueva->sig=NULL;
}
x++;
}while(x<numTel);

printf(" Precio:");scanf("%f",&c.Precio);
fflush(stdin);
printf(" Precio Maxiapoyo:");scanf("%f",&c.PrecioMaxiapoyo);
fflush(stdin);
printf(" Precio Maxiapoyo60:");scanf("%f",&c.PrecioMaxiapoyo60);

//Añado el nuevo nodo a la lista
nuevo=(NodoMovil *)malloc(sizeof(NodoMovil));
if(!nuevo){
printf("Error, no hay memoria suficiente disponible");
return;
}//fin_if

nuevo->info=c;
nuevo->info.listaImeisAlmacen=nueva;
nuevo->info.listaImeisTienda=NULL; //((*moviles)->info.listaImeis)

//añado x el ppio a la lista
aux=*moviles;
*moviles=nuevo;
nuevo->sig=aux;

}//--

void altaImeis(NodoImei **imeis){
unsigned long Imei;
NodoImei *nuevoImei,*auxImei=NULL;

fflush(stdin);
printf(" Imei:");scanf("%lu",&Imei);

nuevoImei=(NodoImei *)malloc(sizeof(NodoImei));
if(!nuevoImei){
printf("Error, no hay memoria suficiente disponible");
return;
}//fin_if

nuevoImei->info=Imei;

//añado x el ppio a la lista
// if(*imeis==NULL)//Si la lista est´´a vac´´ia
auxImei=*imeis;
*imeis=nuevoImei;
nuevoImei->sig=auxImei;
}//altaImeis

void subirATienda(NodoMovil **numTele){
unsigned long Imei=0;
NodoMovil *aux;

visualizarUnMovil(*numTele);
printf("que imei desea subir a tienda?");
scanf("%lu",&Imei);

//Buscar nodo del móvil
aux=buscarImeiAlmacen(numTele,Imei);
if(aux!=NULL){
//Si encontrado
cambiarImei(&aux,Imei);
visualizarUnMovil(aux);
}else{
printf(" Imei no encontrado. ");
}


}//subirATienda

NodoMovil *buscarImeiAlmacen(NodoMovil **moviles,unsigned long imei){
while(*moviles){
while((*moviles)->info.listaImeisAlmacen){
if((*moviles)->info.listaImeisAlmacen->info==imei){
return *moviles;
}//fin_if
(*moviles)->info.listaImeisAlmacen=(*moviles)->info.listaImeisAlmacen->sig;
}//fin_while
(*moviles)=(*moviles)->sig;
}
return NULL;

}//buscarTelefono

void cambiarImei(NodoMovil **c,unsigned long Imei){
NodoImei *nueva,*a;
unsigned long cont=0;

system("cls");

borrarImeiAlmacen(&((*c)->info.listaImeisAlmacen),Imei);

anadirImeiTienda(&nueva,Imei);
(*c)->info.listaImeisTienda=nueva;
//cont=contarNodos((*c)->info.listaImeisTienda);
//if(cont==1)
nueva->sig=NULL;
//cambiarImeiMovil(c,Imei);putchar(' ');

}//cambiarImei

void cambiarImeiMovil(NodoMovil **c,unsigned long Imei){
borrarImeiAlmacen(&(*c)->info.listaImeisAlmacen,Imei);
anadirImeiTienda(&(*c)->info.listaImeisAlmacen,Imei);
}//cambiarImeiMovil

void borrarImeiAlmacen(NodoImei **l,unsigned long Imei){
//printf(" Imeis: ");
NodoImei *ant=*l,*aux=(*l)->sig;

if((*l)->info == Imei)
{
aux = *l;
*l = (*l)->sig;
free(aux);
}else{

while((aux != NULL) &&
(aux->info!= Imei))
{
ant = aux;
aux = aux->sig;
}
if(aux != NULL)
{
ant->sig = aux->sig;
free(aux);
}

}
}//visTodosImeis

void anadirImeiTienda(NodoImei **movil,unsigned long Imei){

NodoImei *nuevoImei,*auxImei=NULL;
//subirImeiATienda(&nueva,Imei);

nuevoImei=(NodoImei *)malloc(sizeof(NodoImei));
if(!nuevoImei){
printf("Error, no hay memoria suficiente disponible");
return;
}//fin_if

nuevoImei->info=Imei;


//añado x el ppio a la lista
// if(*imeis==NULL)//Si la lista est´´a vac´´ia
auxImei=*movil;
*movil=nuevoImei;
nuevoImei->sig=auxImei;



}//añadirImeiTienda
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