Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/06/2012, 19:32
ElPatoGarrido
 
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