Ver Mensaje Individual
  #4 (permalink)  
Antiguo 15/02/2015, 16:11
Rufux
 
Fecha de Ingreso: enero-2015
Mensajes: 14
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Ordenamiento con punteros a estructura en c , ordenamiento burbujeo.

Gracias vangodp, me olvide que programo en C pero con compilador de C++ xD

:::EDITADO::
Me acabo de dar cuenta que no lei bien xD, confundí ordenar letras de una cadena, con ordenar lista dinamica alfabeticamente, bueno si te sirve ya lo tienes xD

De todas formas hice una función de ejemplo del ordenamiento a burbuja con un solo ciclo (creo que es compatible tambien con C, es la siguiente:

Código C++:
Ver original
  1. typedef struct nodo{
  2.     char nombre[100];
  3.     struct nodo *next;
  4. }Nodo;
  5.  
  6. typedef Nodo *ListaNombres;
  7.  
  8. void order(ListaNombres *lista){
  9.    
  10.     ListaNombres antes = NULL, ahora, despues, siguiente, temp;
  11.    
  12.     ahora = *lista;
  13.     despues = ahora->next;
  14.    
  15.     while (despues) {
  16.        
  17.         if(despues->nombre[0] < ahora->nombre[0]){
  18.            
  19.             siguiente = despues->next;
  20.            
  21.             if(antes != NULL)
  22.                 antes->next = despues;
  23.            
  24.             despues->next = ahora;
  25.             ahora->next =  siguiente;
  26.            
  27.             //intercambiamos ahora y despues para continuar el ciclo
  28.             temp = despues;
  29.             despues = ahora;
  30.             ahora = temp;
  31.            
  32.         }
  33.        
  34.         antes = ahora;
  35.         ahora = ahora->next;
  36.         despues = despues->next;
  37.     }
  38. }

Bueno lo probe, funciona (me hiciste repase un poco xD), lo que hace es recibir el puntero a una lista, luego use 5 punteros (puedes usar 4) y son:
antes - el puntero al nodo anterior, es diferente de null despues de el primer ciclo
ahora - seria el puntero al primer nodo seleccionado de la lista
despues - seria el puntero al nodo que le sigue al de "ahora"
siguiente - seria el puntero al nodo que le sigue a "despues" (sirve solo para guardar el la dirección del siguiente nodo, así no lo borramos mientras se hace el cambio, se podria usar solo temp)
temp - seria un puntero temporaneo que sirve para guardar la direccion antes de sustituir "ahora" con "despues" (porque no puedes hacer "ahora" = "despues" y "despues" = "ahora", sin perder la dirección de ahora)

bueno el ciclo termina cuando despues es igual a null, dentro del ciclo comparo los primeros caracteres de los nombres, para ordenarlos de menor a mayor (de A a z)

luego intercambio los nodos, hice un dibujo para mostrarlo xD

http://imgur.com/EhFQ50x

Bueno espero que te sirva de ayuda, saludos

Última edición por Rufux; 15/02/2015 a las 16:19