Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ordenar una lista en C

Estas en el tema de Ordenar una lista en C en el foro de C/C++ en Foros del Web. Hola, tengo la siguiente lista, es de las mas simples, solo con el puntero hacia adelante y el ultimo nodo con puntero a null... Ahora, ...
  #1 (permalink)  
Antiguo 09/06/2012, 19:32
 
Fecha de Ingreso: noviembre-2011
Mensajes: 50
Antigüedad: 12 años, 5 meses
Puntos: 3
Pregunta Ordenar una lista en C

Hola, tengo la siguiente lista, es de las mas simples, solo con el puntero hacia adelante y el ultimo nodo con puntero a null... Ahora, el codigo me compila sin ningun error o warning, y todas las funciones hacen lo que quiero... excepto la funcion sort, me tarde arto en pensar como lo podria hacer, y segun yo deberia funcionar pero cuando compilo y ejecuto como que el programa no hace nada, ¿alguien que sepa arto me puede ayudar?.

Muchas gracias de antemano.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct registro {
  5.     int edad;
  6.     struct registro *sig;
  7. } nodo;
  8.  
  9. void crear(nodo **pointer)
  10. {
  11.     (*pointer) = NULL;
  12. }
  13.  
  14. void agregar(nodo **pointer, int x)
  15. {
  16.     nodo *aux, *nuevo;
  17.    
  18.     aux = (*pointer);
  19.    
  20.     nuevo = (nodo *)malloc(sizeof(nodo));
  21.    
  22.     if (nuevo != NULL)
  23.     {
  24.         nuevo->edad = x;
  25.         nuevo->sig = NULL;
  26.     }
  27.    
  28.     if (*pointer == NULL)
  29.         (*pointer) = nuevo;
  30.     else
  31.         {
  32.             while(aux->sig != NULL)
  33.             aux = aux->sig;
  34.            
  35.             aux->sig = nuevo;
  36.         }
  37. }
  38.  
  39. void imprimir(nodo **pointer)
  40. {
  41.     nodo *aux;
  42.    
  43.     aux = (*pointer);
  44.    
  45.     if (aux != NULL)
  46.     {
  47.         while (aux != NULL)
  48.         {
  49.             printf(" %d ->", aux->edad);
  50.             aux = aux->sig;
  51.         }
  52.         printf(" NULL\n");
  53.     }
  54.     else
  55.     printf(" La lista esta vacia");
  56. }
  57.  
  58. void sort(nodo **pointer)
  59. {
  60.     nodo *aux, *aux2, *temp;
  61.    
  62.     int mayor = 0;
  63.    
  64.     aux = (*pointer);
  65.    
  66.     aux2 = aux;
  67.    
  68.     while (aux->sig != NULL)
  69.     {
  70.         while (aux2 != NULL)
  71.         {
  72.             if (aux2->edad >= mayor)
  73.                 mayor = aux2->edad;
  74.         }
  75.        
  76.         aux2 = aux;
  77.        
  78.         while (aux2->sig != NULL)
  79.         {
  80.             if ((aux2->sig)->edad == mayor)
  81.             {
  82.                 temp = (aux2->sig)->sig;
  83.                 (aux2->sig)->sig = aux;
  84.                 aux->sig = temp;
  85.             }
  86.             aux2 = aux2->sig;
  87.            
  88.         }
  89.         aux = aux->sig;
  90.     }
  91. }
  92.  
  93. int main()
  94. {
  95.     nodo *grupo;
  96.    
  97.     crear(&(grupo));
  98.    
  99.     agregar(&(grupo), 15);
  100.     imprimir(&(grupo));
  101.     agregar(&(grupo), 10);
  102.     imprimir(&(grupo));
  103.     agregar(&(grupo), 55);
  104.     imprimir(&(grupo));
  105.     agregar(&(grupo), 75);
  106.     imprimir(&(grupo));
  107.     agregar(&(grupo), 25);
  108.     imprimir(&(grupo));
  109.     agregar(&(grupo), 5);
  110.     imprimir(&(grupo));
  111.     agregar(&(grupo), 35);
  112.     imprimir(&(grupo));
  113.     sort(&(grupo));
  114.     imprimir(&(grupo));
  115.    
  116.     return EXIT_SUCCESS;
  117. }

Última edición por ElPatoGarrido; 09/06/2012 a las 23:02
  #2 (permalink)  
Antiguo 09/06/2012, 23:43
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 4 meses
Puntos: 94
Respuesta: Ordenar una lista en C

Hola! nose si el ordenamiento q estas haciendo esta bien(no lo analice detenidamente), pero te marco el error q veo:
Código C:
Ver original
  1. while (aux2 != NULL)
  2.         {
  3.             if (aux2->edad >= mayor)
  4.                 mayor = aux2->edad;
  5.         }
aca estas generando un bucle infinito, la condicion del while siempre va a ser verdadera

Saludos
  #3 (permalink)  
Antiguo 10/06/2012, 10:11
 
Fecha de Ingreso: noviembre-2011
Mensajes: 50
Antigüedad: 12 años, 5 meses
Puntos: 3
Respuesta: Ordenar una lista en C

Gracias, eso era lo que producia que el sort no hiciera nada, aora despues del sort me imprime algo, pero el problema es que no me los ordena si no que hace algo raro xD

Etiquetas: funcion, int, lista, programa, struct
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:00.