Ver Mensaje Individual
  #11 (permalink)  
Antiguo 13/05/2011, 10:29
sam90
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Ordenacion de lista de objetos

Código C++:
Ver original
  1. #include <iostream>
  2. #include <string>
  3. enum genero { teatro,ensayo,novela };
  4. using namespace std;
  5.  
  6.  
  7. /*    CLASE LIBRO  */
  8. class libro
  9. {
  10. public:
  11.     int codigo;
  12.     string titulo;
  13.     int anho;
  14.     int autor;
  15.     string editorial;
  16.     genero _Genero;
  17.  
  18.     libro(int c,string t, int ano, int a, string edi,genero g)
  19.     {
  20.         codigo = c;
  21.         titulo = t;
  22.         anho = ano;
  23.         autor = a;
  24.         editorial = edi;
  25.         _Genero = g;
  26.     }
  27.     void printlibro()
  28.     {
  29.         cout<<"codigo: " << codigo << " Titulo: " << titulo << endl;
  30.     }
  31. };
  32.  
  33. /*    CLASE NODOLIBRO  */
  34. class NodoLibro
  35. {
  36. public:
  37.     libro * lib;
  38.     NodoLibro * anterior;
  39.     NodoLibro * siguiente;
  40.     NodoLibro(libro * l)
  41.     {
  42.         lib = l;
  43.         anterior = NULL;
  44.         siguiente = NULL;
  45.     }
  46.     bool compare(const NodoLibro * l)
  47.     {
  48.         if (lib->codigo > l->lib->codigo)
  49.             return true;
  50.         return false;
  51.     }
  52.    
  53.     void changeLibro(NodoLibro * l)
  54.     {
  55.         libro * temp = lib;
  56.         lib = l->lib;
  57.         l->lib =temp;
  58.     }
  59. };
  60.  
  61. /*    CLASE LISTA  */
  62.  
  63. class Lista
  64. {
  65. public:
  66.     NodoLibro * primero;
  67.     NodoLibro * ultimo;
  68.     Lista()
  69.     {
  70.         primero = ultimo = NULL;
  71.     }
  72.     ~Lista()
  73.     {
  74.         NodoLibro * temp = primero, * temp2;
  75.         while (temp != NULL) {
  76.             temp2 = temp->siguiente;
  77.             delete temp;
  78.             temp = temp2;
  79.         }
  80.     }
  81.     void Append(libro * l)
  82.     {
  83.         NodoLibro * n = new NodoLibro(l);
  84.         if (ultimo  == NULL )
  85.             primero = ultimo = n;
  86.         else{
  87.             n->siguiente = NULL;
  88.             ultimo->siguiente = n;
  89.             n->anterior = ultimo;
  90.             ultimo = n;
  91.         }
  92.     }
  93.     libro * Remove ()
  94.     {
  95.         NodoLibro * n = ultimo;
  96.         libro * l = ultimo->lib;
  97.         if (ultimo == primero)
  98.             ultimo = primero = NULL;
  99.         else{
  100.             ultimo = ultimo->anterior;
  101.             ultimo->siguiente = NULL;
  102.         }
  103.         delete n;
  104.         return l;
  105.        
  106.     }
  107.    
  108.     void printlista()
  109.     {
  110.         NodoLibro * temp = primero;
  111.         while (temp != NULL){
  112.             temp->lib->printlibro();
  113.             temp = temp->siguiente;
  114.         }
  115.     }
  116.    
  117.     void OrdenarLista()
  118.     {
  119.         NodoLibro * n1,*n2;
  120.         for (n1 = ultimo; n1 != primero ; n1 = n1->anterior)
  121.             for (n2 = primero; n2 != n1 ; n2 = n2->siguiente)
  122.             {
  123.                 if (n2->compare(n2->siguiente))
  124.                     n2->changeLibro(n2->siguiente);
  125.                    
  126.             }
  127.     }
  128. } ;
  129.  
  130. int main ()
  131. {
  132.     libro * l1 = new libro(1,"mi mundo",2000,4,"edu",teatro);
  133.     libro * l2 = new libro(3,"hello world",2000,4,"edu",teatro);
  134.     libro * l3 = new libro(2,"a la madona",2000,4,"edu",teatro);
  135.     Lista * c = new Lista();
  136.     c->Append(l1);
  137.     c->Append(l2);
  138.     c->Append(l3);
  139.  
  140.     c->printlista();
  141.     cout<<"----------------------------------------------------"<<endl;
  142.     c->OrdenarLista();
  143.     c->printlista();
  144.     delete c;
  145.     cout<<"chauuuu" << endl;
  146.     return 0;
  147.    
  148. }