jueves, 2 de julio de 2015

Ordenar y combinar listas


20.7.Escriba un programa para combinar dos objetos de lista ordenada de enteros en un solo objeto de lista ordenada de enteros. La función combinar debe recibir referencias a cada uno de los objetos lista que se van a combinar, y debe devolver una referencia a objeto lista en el que se colocarán los elementos combinados.

/*
* C++ - Ordenar y combinar numeros en una lista enlazada simple
*dev c++ ver 4.9.2 , usar cstdlib para versiones mayores
*/
 
#include <iostream>
 
using namespace std;
 
struct nodo{
       int nro;        // en este caso es un numero entero
       struct nodo *sgte;
};
 
typedef struct nodo *Tlista,*Tlista2;
 
Tlista inicio, fin;
Tlista2 inicio2,fin2;
 
void generarLista( Tlista &inicio, Tlista &fin, int n ) 
{
     Tlista q;
     
     for(int i=0; i<n; i++)
     {
         q = new(struct nodo);
         q->nro = rand()%30;
         if(inicio==NULL)
         {
              q->sgte = inicio;
              inicio  = q;
              fin     = q; 
         }
         else
         {
              q->sgte   = fin->sgte;
              fin->sgte = q;
              fin       = q;
         }
     }
     
          inicio = inicio->sgte;
     }
 
}
 
void ordenarLista(Tlista lista)
{
     Tlista actual , siguiente;
     int t;
     
     actual = lista;
     while(actual->sgte != NULL)
     {
          siguiente = actual->sgte;
          
          while(siguiente!=NULL)
          {
               if(actual->nro > siguiente->nro)
               {
                    t = siguiente->nro;
                    siguiente->nro = actual->nro;
                    actual->nro = t;          
               }
               siguiente = siguiente->sgte;                    
          }    
          actual = actual->sgte;
          siguiente = actual->sgte;
           
     }
}
 
void concatenar(Tlista &inicio, Tlista &inicio2)
{
 Tlista aux = inicio;
 while(aux->sgte)
 {
  aux = aux->sgte;
 }
 aux->sgte = inicio2;
}
 
/*                        Funcion Principal
------------------------------------------------------------------*/
 
int main()
{
    inicio = NULL;
    fin    = NULL;
    inicio2 = NULL;
    fin2    = NULL;
 
    system("color 0b");
    
    generarLista( inicio, fin, 4 );
    ordenarLista( inicio );
    cout<<"\n\n LISTA:\n\n";
    reportarLista( inicio );        
    
    generarLista( inicio2, fin2, 5 );
    ordenarLista( inicio2 );
    cout<<"\n\n LISTA:\n\n";
    reportarLista( inicio2 ); 
    
    concatenar( inicio , inicio2 );
    ordenarLista( inicio );
    cout<<"\n\n LISTA:\n\n";
    reportarLista( inicio );
 
   system("pause");
   
   return 0;
}

No hay comentarios.:

Publicar un comentario