Advertisement
KevinPerez

Lista Simple y Funciones

Sep 30th, 2012
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.78 KB | None | 0 0
  1. using namespace System;
  2. CLista::CLista(void)
  3. {
  4.     inicio=NULL;
  5.     final=NULL;
  6. }
  7. CLista::~CLista(void)
  8. { }
  9. void CLista::Insertar_al_inicio(int pdato)
  10. {
  11.     CNodo *nuevo;
  12.     nuevo = new CNodo();
  13.     nuevo->Set_dato(pdato);
  14.     nuevo->Set_next(NULL);
  15.  
  16.     if(inicio==NULL)
  17.         final=nuevo;
  18.     else
  19.         nuevo->Set_next(inicio);
  20.  
  21.     inicio=nuevo;
  22. }
  23. void CLista::Insertar_al_final(int pdato)
  24. {
  25.     CNodo *nuevo;
  26.     nuevo = new CNodo();
  27.     nuevo->Set_dato(pdato);
  28.     nuevo->Set_next(NULL);
  29.    
  30.     if(final==NULL)
  31.         inicio=nuevo;
  32.     else
  33.         final->Set_next(nuevo);
  34.     final=nuevo;
  35. }
  36.  
  37. int CLista::Sumar()
  38. {  
  39.     int suma;
  40.     CNodo* p;
  41.    
  42.     if(inicio!=NULL)
  43.     {
  44.         p=inicio;
  45.         while(p!=NULL)
  46.         {
  47.             suma+=p->Get_dato();
  48.             p=p->Get_next();
  49.         }
  50.         return suma;
  51.     }
  52.     else
  53.         return 0;
  54. }
  55. bool CLista::Verificar_si_existe(int pdato)
  56. {
  57.     CNodo *p;
  58.     p=inicio;
  59.     while(p!=NULL)
  60.     {
  61.         if(p->Get_dato()==pdato)
  62.             return true;
  63.         p=p->Get_next();
  64.     }
  65.     return false;
  66. }
  67. void CLista::Eliminar_al_inicio()
  68. {
  69.     CNodo *p;
  70.     CNodo *q;
  71.  
  72.     if(inicio!=NULL)
  73.     {
  74.         p = inicio;
  75.         inicio = inicio->Get_next();   
  76.         delete p;
  77.     }
  78. }
  79. void CLista::Eliminar_el_ultimo()
  80. {
  81.     CNodo *p;
  82.     CNodo *q;
  83.     if(inicio!=NULL)
  84.     {
  85.         if(inicio->Get_next()==NULL)
  86.             inicio=NULL;
  87.         else
  88.         {
  89.             p=inicio;
  90.             while(p->Get_next()!=NULL)
  91.             {
  92.                 q=p;
  93.                 p=p->Get_next();
  94.             }
  95.             q->Set_next(NULL);
  96.             final = q;
  97.             delete p;
  98.         }
  99.     }
  100. }
  101. int CLista::Obtener_mayor()//Devolver 0 si la lista esta vacia
  102. {
  103.     CNodo* p;
  104.     int mayor=-9999;
  105.    
  106.     if(inicio!=NULL)
  107.     {
  108.         p=inicio;
  109.         while(p!=NULL)
  110.         {
  111.             if(p->Get_dato()>mayor)
  112.                 mayor=p->Get_dato();
  113.             p=p->Get_next();
  114.         }
  115.         return mayor;
  116.     }
  117.     else
  118.         return 0;
  119. }
  120. int CLista::Obtener_menor()//Devolver 0 si la lista esta vacia
  121. {
  122.     CNodo* p;
  123.     int menor=9999;
  124.    
  125.     if(inicio!=NULL)
  126.     {
  127.         p=inicio;
  128.         while(p!=NULL)
  129.         {
  130.             if(p->Get_dato()<menor)
  131.                 menor=p->Get_dato();
  132.             p=p->Get_next();
  133.         }
  134.         return menor;
  135.     }
  136.     else
  137.         return 0;
  138.    
  139. }
  140. // metodos para recorrer la lista
  141. void CLista::Recorrer_lista()
  142. {
  143.     CNodo *p;
  144.     if(inicio!=NULL)
  145.     {
  146.         while(p->Get_next()!=NULL)
  147.             p=p->Get_next();
  148.     }
  149. }
  150. void CLista::Imprimir_lista()
  151. {
  152.     CNodo *p;
  153.     p=inicio;
  154.     int k=0;
  155.     while(p!=NULL)
  156.     {
  157.         k++;
  158.         printf("Dato[%d]=> %d\n",k,p->Get_dato());
  159.         p=p->Get_next();   
  160.     }
  161. }
  162. void CLista::Imprimir_al_revez()
  163. {
  164.     CLista* Nueva;
  165.    
  166.     int k = 0;
  167.     CNodo* p;
  168.     p = inicio;
  169.    
  170.     while(p!=NULL)
  171.     {
  172.         p=p->Get_next();
  173.         k++;
  174.     }
  175.     while(k!=0)
  176.     {
  177.         p=final;
  178.         printf("%d\n",p->Get_dato());
  179.         Eliminar_el_ultimo();
  180.         k--;
  181.     }      
  182. }
  183. void CLista::Barajar_lista()
  184. {
  185.   ///1. Crear una lista auxiliar y esta va a tomar los datos de la lista original de la siguiente manera
  186.     CLista *Nueva;
  187.     Nueva = new CLista();
  188.     //2. Este nodo va recorrer la lista de tal forma que dara los valores a la lista nueva
  189.     CNodo* p;
  190.     p = inicio;//aca p tienes asignado la memoria del incio y por ello tiene el valor del incio
  191.     //EJEMPLO si inicio=50=AAE11.....Luego P=inicio....entonces P=50=AAE11
  192.  
  193.     //3. Los valores se pondran en cualquier poscion de la lista(barajar) usando las funicones
  194.     //Insetar al final o Insertar al incio entonces para realizar esto creamos una variable "numero" que tomara
  195.     //los valores 1 y 2 para hacer el random de las funcioens en un switch por ejemplo:
  196.     //si 1=>Insertar_al_final()
  197.     //si 2=>Insertar_al_inicio()
  198.     //4. Por ultimo imprimimos la Nueva lista
  199.     System::Random ^R = gcnew System::Random(System::DateTime::Now.Ticks);
  200.     int numero=0;
  201.  
  202.     while(p!=NULL)
  203.     {
  204.         numero=R->Next(0,2);
  205.  
  206.         switch(numero)
  207.         {
  208.             case 0:
  209.                 Nueva->Insertar_al_inicio(p->Get_dato());
  210.                 break;
  211.             case 1:
  212.                 Nueva->Insertar_al_final(p->Get_dato());
  213.                 break;
  214.         }
  215.         p=p->Get_next();
  216.     }
  217.  
  218.     Nueva->Imprimir_lista();
  219.     delete Nueva;//Borramos la lista nueva para no perder el orden de la original
  220. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement