[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