[C con Clase] 1 lista dentro de otra lista

Jose Manuel Calaudio Hernández jclaudio_4 en hotmail.com
Sab Abr 10 06:18:47 CEST 2010


hola como puedo para ver este foro 
y poder comentar en el. y tambien quiero pedir ayuda para trabajar con x++

> Date: Fri, 9 Apr 2010 22:22:09 -0400
> From: srd4121 en njit.edu
> To: cconclase en listas.conclase.net
> Subject: Re: [C con Clase] 1 lista dentro de otra lista
> 
> Hola Toni,
> 
> Toni wrote:
> > hola, estoy aprendiendo a usar C++ y estoy atascado en una práctica.
> > 
> > Después de estar ya un par de horas buscando por donde falla mi
> > código, ya lo localicé, y al parecer el void AlmacenarCiudad no
> > funciona correctamente, ya que no escribe en el nodo el nombre de la
> > ciudad, lo deja en nulo como podeis ver a continuacion.
> > 
> 
> [CORTE]
> 
> > 
> 
> Veamos solamente la función en cuestión.
> 
> > void AlmacenarCiudad (T_ciudad& datos, const string& ciudad, bool& ok){
> >         
> >         T_ciudad aux;
> >         ok=false;
> >         aux=datos;     
> >   /*      if (datos==NULL){
> >         datos=new nodo1;
> >         datos->ciutat=ciudad;
> >         datos->sig=NULL;
> >         aux=datos;
> >         }*/
> >         while (aux!=NULL){   //no consigo que escriba el nombre de la 
> > ciudad...
> >            if (aux->sig->ciutat==ciudad){
> 
> No sabes si 'aux->sig' es un puntero válido. Por lo que veo, deberías 
> comprobar 'aux->ciutat' y no la información del siguiente nodo.
> 
> En segundo lugar, si ya hemos encontrado que la ciudad existe, entonces 
> deberíamos terminar este bucle 'while' para no continuar. De esta 
> manera, 'aux' apunta al nodo correcto. De lo contrario, 'aux' acabará 
> siendo nulo, porque la lista está diseñada así: un puntero nulo al final.
> 
> >               ok=true;                       
> >             }
> >            aux=aux->sig;  
> >          }
> >           if (aux==NULL){
> >               aux = new nodo1;             
> >               aux->ciutat=ciudad;
> >               aux->sig=NULL;           
> >           }
> >        
> >    if (ok==true){ //true y false funcionan correctamente
> >      cout<<"La ciudad ya existe"<<endl<<endl;            
> >     }
> >     else{
> >        cout<<"La ciudad se anadio correctamente"<<endl<<endl;  
> >      }
> >  }
> >  
> 
> Si la ciudad no existe, creas un nuevo nodo, pero no enlazas ese nodo a 
> la lista actual apuntada por 'datos'. Debes relacionar el nuevo nodo con 
> los demás en la lista.
> 
> En tu caso, debes guardar el puntero al último nodo, para poder 
> modificar su puntero 'sig'. Tal y como implementas esta función, 'aux' 
> llega a ser nulo, lo cual no ayuda si quieres modificar la lista 
> original; es demasiado tarde.
> 
> Sugiero que mantengas otro puntero al nodo anterior a 'aux'. Por ejemplo,
> 
> ant = datos;
> aux = ant->sig;
> 
> while( !aux && !ok )
> {
>    if( aux->ciutat == ciudad )
>      ok = true;
> 
>    ant = aux;
>    aux = ant->sig;
> }
> 
> if( !aux )
> {
>    // Reusamos 'aux'
>    aux = new nodo1;
>    aux->ciutat = ciudad;
>    aux->sig = 0;
> }
> 
> ant->sig = aux;  // Enlazamos el nuevo nodo a la lista
> 
> Este algoritmo sólo funciona si la lista tiene más de 2 nodos. Deberías 
> tratar los casos particulares de una lista vacía o de un solo nodo.
> 
> 
> Espero que esto te oriente.
> 
> Steven
> 
> 
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
 		 	   		  
_________________________________________________________________
Discover the new Windows Vista
http://search.msn.com/results.aspx?q=windows+vista&mkt=en-US&form=QBRE
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100409/6b108a09/attachment.html>


Más información sobre la lista de distribución Cconclase