Donar $20 Donar $50 Donar $100 Donar mensualmente
 


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
Duda con ordenamiento de lista simplemente enlazada
Autor Mensaje
nanohueso Sin conexión
Campeon del cubo Rubik
Thats what she said
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 187
Agradecimientos dados: 132
Agradecimientos: 14 en 10 posts
Registro en: Feb 2012
Mensaje: #1
Duda con ordenamiento de lista simplemente enlazada Ejercicios Informática I (Electrónica)
Hola gente que tal? Estoy teniendo problemas con la puesto a punto de la funcion ordenar que estoy haciendo.

Es un lista simplemente enlazada que contiene el campo string nombre_apellido.Mi idea es ordenar la lista alfabeticamente de forma ascendente ( A-Z). Cuestion que declare 2 punteros NODO llamados aux y aux1 , aux siempre va a estar una posicion por detras de aux1 .

Pongo la declaración de las estructuras para mayor claridad.

typedef struct socio
{
char nombre_apellido[30];
int codigo;
int cantidad;

}SOCIO;

typedef struct nodo
{
SOCIO dato_int;
struct nodo *next;

}NODO;

void ordenar_lista(NODO **H)
{
printf("\n Se ordenara la lista alfabeticamente \n ");
NODO *aux,*aux1;
aux=*H;
aux1=aux->next;
while(aux1 != NULL)
{

if(strcmp(aux->dato_int.nombre_apellido,aux1->dato_int.nombre_apellido)>0)
{
printf("\n entre al if \n");
aux->next=aux1->next;
aux1->next=aux;
}
aux1=aux1->next;
aux=aux->next;
printf("sigo en el while");
}
}

Los printfs que puse ahi colgados son porque fui probando donde se quedaba colgado el programa , la cosa es que cuando ejecuto esa función , se me queda tildado en el while y no siempre entra al if.

Mi idea era utilizar un algoritmo tipo burbuja.


Desde ya se agradece cualquier tipo de ayuda.
Saludos
Otros adjuntos en este tema
.png  lista.png ( 60,54 KB / 392) por Stille
29-10-2013 11:44
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Stille Sin conexión
Empleado de Fotocopiadora
Sin estado :(
**

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 27
Agradecimientos dados: 1
Agradecimientos: 8 en 8 posts
Registro en: Mar 2011
Mensaje: #2
RE: Duda con ordenamiento de lista simplemente enlazada
Haciendo lo que vos haces esta bien, pero así te queda aux1 apuntando a lo que sería la primera posicion y aux a lo que seria la segunda. Te adjunto un ""dibujo"" (enchastre diria) ejemplificando lo que quiero decir. SUPONGO que bastara con cambiar los punteros de lugar, probalo (son los pasos que marque como 3 y 4 lo que deberias agregar adentro del if, despues de los pasos 1 y 2)

Edit: En el 4° paso es aux1=aux1->next; aclaro, me confundi en el dibujo.


Archivo(s) adjuntos Imagen(es)
   
(Este mensaje fue modificado por última vez en: 29-10-2013 12:27 por Stille.)
29-10-2013 12:14
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
nanohueso Sin conexión
Campeon del cubo Rubik
Thats what she said
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 187
Agradecimientos dados: 132
Agradecimientos: 14 en 10 posts
Registro en: Feb 2012
Mensaje: #3
RE: Duda con ordenamiento de lista simplemente enlazada
Me quedo asi:

void ordenar_lista(NODO **H)
{
printf("\n Se ordenara la lista alfabeticamente \n ");
NODO *aux,*aux1;
aux=*H;
aux1=aux->next;
while(aux1 != NULL)
{

if(strcmp(aux->dato_int.nombre_apellido,aux1->dato_int.nombre_apellido)>0)
{
aux -> next=aux1->next;
aux1 -> next=aux;
}
aux = aux1;
aux1 = aux1 -> next;
}
}

Pero no hace nada =S. Que paso?
29-10-2013 13:05
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Stille Sin conexión
Empleado de Fotocopiadora
Sin estado :(
**

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 27
Agradecimientos dados: 1
Agradecimientos: 8 en 8 posts
Registro en: Mar 2011
Mensaje: #4
RE: Duda con ordenamiento de lista simplemente enlazada
Nono, me interpretaste mal yo me referia a colocar 3 y 4 adentro del if, afuera del if dejarlo igual. Asi seria, probalo a ver que pasa



void ordenar_lista(NODO **H)
{
printf("\n Se ordenara la lista alfabeticamente \n ");
NODO *aux,*aux1;
aux=*H;
aux1=aux->next;
while(aux1 != NULL)
{

if(strcmp(aux->dato_int.nombre_apellido,aux1->dato_int.nombre_apellido)>0)
{
aux -> next=aux1->next;
aux1 -> next=aux;
aux = aux1;
aux1 = aux1 -> next;
}
aux1=aux1->next;
aux=aux->next;
}
}

29-10-2013 13:11
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
nanohueso Sin conexión
Campeon del cubo Rubik
Thats what she said
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 187
Agradecimientos dados: 132
Agradecimientos: 14 en 10 posts
Registro en: Feb 2012
Mensaje: #5
RE: Duda con ordenamiento de lista simplemente enlazada
no me funco =/. Alguna solucion?
29-10-2013 13:30
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Stille Sin conexión
Empleado de Fotocopiadora
Sin estado :(
**

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 27
Agradecimientos dados: 1
Agradecimientos: 8 en 8 posts
Registro en: Mar 2011
Mensaje: #6
RE: Duda con ordenamiento de lista simplemente enlazada
MMM que raro que es lo que te hace?? pusiste printfs para ver si entra al if? no te los imprime en orden o te rompe toda la lista??
Tenes el codigo completo? del programa con el cual cargas la lista tambien?? Si lo tenes subimelos asi los reviso a ver si te puedo ayudar!
Saluds.-
29-10-2013 13:40
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
nanohueso Sin conexión
Campeon del cubo Rubik
Thats what she said
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 187
Agradecimientos dados: 132
Agradecimientos: 14 en 10 posts
Registro en: Feb 2012
Mensaje: #7
RE: Duda con ordenamiento de lista simplemente enlazada
Antes que nada, muchas gracias por tomarte tu tiempo en ayudarme, de verdad que lo aprecio mucho.

El codigo es este:

http://www.copiatelo.com/index.php?show=m5d940e64

Algo que hace (y que es rarisimo) es eliminarme nodos, no se que onda. Fijate de compilarlo, vas a ver.

Saludos y nuevamente gracias.
29-10-2013 14:24
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Stille Sin conexión
Empleado de Fotocopiadora
Sin estado :(
**

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 27
Agradecimientos dados: 1
Agradecimientos: 8 en 8 posts
Registro en: Mar 2011
Mensaje: #8
RE: Duda con ordenamiento de lista simplemente enlazada
Me di cuenta del error, ese algoritmo que te pase sirve nada mas que para el caso de intercambiar el primer nodo con el segundo. En caso de ser un nodo intermedio perdes enlaces, ahí está el problema. Tenes que tener otro puntero "aux_ant" o como lo quieras llamar, que apunte al nodo anterior al que se esta moviendo aux, asi como aux1 va a apuntar siempre al siguiente.
Tambien tenes que considerar la situacion que intercambiar el ultimo nodo es diferente ya que como el next del ultimo apunta a NULL si llegas a hacer que otro puntero apunte a null también vas a tener problemas, cuidado con eso.
En resumen, debes tener un puntero que apunte siempre al anterior de aux y tenes que separar el problema en 3 partes, en caso de que sea intercambiar los dos primeros nodos, en caso de que sea intercambiar 2 cualquiera del medio y en caso de que sea intercambiar los ultimos dos.
A todo esto sumale que tenes que repetir el proceso n-1 veces (como en un burubuja en un vector), osea que tendrias que meter eso en un for de 0 a n-1 donde n seria la cantidad de nodos de la lista. Así lo pensaría yo luego de analizarlo más cuidadosamente.
Es mas jodido de lo que parece.
Si tengo tiempo a la noche escribo el codigo completo de como lo pense, saludos! espero haber sido de ayuda!.-
29-10-2013 15:51
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Stille recibio 1 Gracias por este post
nanohueso (01-11-2013)
nanohueso Sin conexión
Campeon del cubo Rubik
Thats what she said
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 187
Agradecimientos dados: 132
Agradecimientos: 14 en 10 posts
Registro en: Feb 2012
Mensaje: #9
RE: Duda con ordenamiento de lista simplemente enlazada
Lo de n-1 lo pense pero que se yo, se me complico mucho Confused. Lo de tener 2 aux, es lo que hice en el programa; tenes aux (que seria el que recorre el header) y aux1 que siempre va "adelante" de aux. Pero bue, quizas necesite 3.

Si tenes tiempo a la noche y podes escribis el codigo seria genial (mañana rindo el parcial). Saludos y gracias!!!
29-10-2013 15:59
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Feer Sin conexión
Presidente del CEIT
win-win
**********

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 4.565
Agradecimientos dados: 594
Agradecimientos: 2.490 en 411 posts
Registro en: Apr 2010
Mensaje: #10
RE: Duda con ordenamiento de lista simplemente enlazada
Che me meto, no te conviene trabajar con dos funciones? un insertar ordenado y sacar nodo de lista?
Yo digo, porque si no es un lio bárbaro lo que haces...

[Imagen: digitalizartransparent.png]
29-10-2013 16:03
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Stille Sin conexión
Empleado de Fotocopiadora
Sin estado :(
**

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 27
Agradecimientos dados: 1
Agradecimientos: 8 en 8 posts
Registro en: Mar 2011
Mensaje: #11
RE: Duda con ordenamiento de lista simplemente enlazada
Como consejo, quizá no es el objetivo. Pero no pensaste en hacer una nueva lista en la que vas agarrando los nodos de la que queres ordenar y los insertas ordenados??
Creo que sería más facil. Siendo simplemente enlazada vas a necesitar 3 punteros para intercambiar nodos del medio, por el hecho de que sino perdes el enlace entre el nodo apuntado por aux y el nodo anterior (no se si me explico).
Edit: JAjaj fer me ganaste de mano, es mucho mas sencillo insertando ordenado pero quiza no es lo que buscaba por eso dije jaja.-
(Este mensaje fue modificado por última vez en: 29-10-2013 16:07 por Stille.)
29-10-2013 16:06
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Stille recibio 1 Gracias por este post
Feer (29-10-2013)
Feer Sin conexión
Presidente del CEIT
win-win
**********

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 4.565
Agradecimientos dados: 594
Agradecimientos: 2.490 en 411 posts
Registro en: Apr 2010
Mensaje: #12
RE: Duda con ordenamiento de lista simplemente enlazada
Jajaja, creo que en la cursada te insentivan a eso... =P Por eso también comente esa solución jaja.

Igualmente yo me pongo con este si hace falta pero... lo veo difícil jaja

[Imagen: digitalizartransparent.png]
29-10-2013 16:12
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.