Advertisement
pmanriquez93

Parte 1 - Lab 4

May 25th, 2014
489
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.96 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "lista.h"
  4.  
  5. void hallaMayor(TLista *lista){
  6.     TNodo *ptrRec;
  7.     TElemento num, max;
  8.     int cont,contMax;
  9.    
  10.     max = 0;
  11.     cont = 0;
  12.     contMax = 0;
  13.    
  14.     ptrRec = lista->inicio;
  15.     while (ptrRec !=NULL){
  16.         cont++;                 // cont para hallar el indice
  17.         num = ptrRec->elem;
  18.         if (num>max){           // Nuevo maximo, guarda numero y posicion
  19.             max = num;
  20.             contMax = cont;
  21.         }      
  22.         ptrRec = ptrRec->ptrSig;
  23.     }
  24.     printf("El numero mayor es : %d \n", max );
  25.     printf("Su posicion en la lista es : %d \n", contMax );  
  26. }
  27.  
  28. void hallaMenorYVeces (TLista *lista){
  29.     TNodo *ptrRec;
  30.     ptrRec = lista->inicio;
  31.    
  32.     TElemento num,min;
  33.     int cont;
  34.     cont = 0;
  35.     min = 100000;               // Un valor constante, tipo MAX_INT
  36.    
  37.     while (ptrRec != NULL){
  38.         num = ptrRec->elem;
  39.         if (num == min)         // Si es el mismo minimo, aumento el contador
  40.             cont++;
  41.         if (num<min){           // Nuevo minimo(primera aparicion), contador = 1
  42.             min = num;
  43.             cont = 1;        
  44.         }
  45.         ptrRec = ptrRec->ptrSig;
  46.     }
  47.     printf("El numero minimo es: %d\n", min );
  48.     printf("La cantidad de veces que se repite es : %d\n", cont );
  49. }
  50.  
  51. void borraElemento(TLista* lista, TElemento elem){
  52.     TNodo *ptrRec, *ptrAnt;
  53.     TElemento num;
  54.     ptrAnt = NULL;
  55.     ptrRec = lista->inicio;
  56.    
  57.     while (ptrRec != NULL){
  58.         num = ptrRec->elem;      
  59.         if (num == elem){               // Si es el elemento a eliminar
  60.             if (num == lista->inicio->elem)             // Si es el primero
  61.                 lista->inicio = lista->inicio->ptrSig;                
  62.             else                        // Si no es el primero
  63.                 ptrAnt->ptrSig = ptrRec->ptrSig;
  64.                 ptrRec = ptrRec->ptrSig;
  65.             free(ptrRec);            
  66.         }else{                          // Si no es el elemento a eliminar
  67.             ptrAnt = ptrRec;
  68.             ptrRec = ptrRec->ptrSig;            
  69.         }    
  70.     }
  71. }
  72.  
  73. void reemplazaElemento(TLista *lista, TElemento ant, TElemento nuevo){
  74.     TNodo *ptrRec;
  75.     ptrRec = lista->inicio;
  76.    
  77.     while (ptrRec != NULL){
  78.         if(ptrRec->elem == ant){   // Cada vez que lo encuentra, lo cambia
  79.             ptrRec->elem = nuevo;            
  80.         }
  81.         ptrRec = ptrRec->ptrSig;
  82.     }
  83. }
  84.  
  85. void imprimeSublista(TLista *lista, int ini, int fin){
  86.     TNodo *ptrRec;
  87.     ptrRec = lista->inicio;
  88.    
  89.     int cont,i;
  90.     cont = 1;
  91.    
  92.     while (cont < ini){         // Avanzo hasta la posicion pedida
  93.         cont++;
  94.         ptrRec = ptrRec->ptrSig;
  95.     }
  96.     for (i=0;i<=(fin-ini);i++){        // For desde ini hasta fin para imprimir
  97.         printf(" %d ",ptrRec->elem);
  98.         ptrRec = ptrRec->ptrSig;
  99.     }
  100.     printf("\n");
  101. }
  102.  
  103. void insertaFin(TLista *lista, TElemento elem){
  104.     TNodo *ptrNuevo, *ptrRec;
  105.     ptrNuevo = (TNodo*)malloc(sizeof(TNodo));
  106.    
  107.     ptrNuevo->elem = elem;
  108.     ptrNuevo->ptrSig = NULL;
  109.    
  110.     if (lista->inicio == NULL){         // Si la lista es vacia
  111.         lista->inicio = ptrNuevo;
  112.     }
  113.     else{                               // Si la lista no es vacia
  114.         ptrRec = lista->inicio;        
  115.         while (ptrRec->ptrSig != NULL)  // Encontrar el final
  116.                 ptrRec = ptrRec->ptrSig;
  117.         ptrRec->ptrSig = ptrNuevo;    
  118.     }
  119.    
  120.    
  121. }
  122.  
  123. TLista merge(TLista *l1, TLista *l2) {
  124.     TNodo *ptrLista1, *ptrLista2;
  125.     ptrLista1 = l1->inicio;
  126.     ptrLista2 = l2->inicio;
  127.    
  128.     TLista listaFin;
  129.     crearLista(&listaFin);
  130.     //printf(&listaFin);
  131.    
  132.     while (ptrLista1 != NULL && ptrLista2 != NULL){
  133.         // Ir avanzando los punteros cuando uno es menor que el otro
  134.         if (ptrLista1->elem < ptrLista2->elem){
  135.             //printf(" %d ",ptrLista1->elem);
  136.             insertaFin(&listaFin,ptrLista1->elem);          
  137.             ptrLista1 = ptrLista1->ptrSig;
  138.         }else{
  139.             //printf(" %d ",ptrLista2->elem);
  140.             insertaFin(&listaFin,ptrLista2->elem);  
  141.             ptrLista2 = ptrLista2->ptrSig;
  142.         }
  143.     }
  144.    
  145.     // Whiles para imprimir los elementos restantes, si los hubieran
  146.    
  147.     while (ptrLista1 != NULL){
  148.         //printf(" %d ",ptrLista1->elem);
  149.         insertaFin(&listaFin,ptrLista1->elem);
  150.         ptrLista1 = ptrLista1->ptrSig;      
  151.     }
  152.    
  153.     while (ptrLista2 != NULL){
  154.         //printf(" %d ",ptrLista2->elem);
  155.         insertaFin(&listaFin,ptrLista2->elem);
  156.         ptrLista2 = ptrLista2->ptrSig;        
  157.     }
  158.     return listaFin;
  159. }
  160.  
  161.  
  162. /* PARA PROBAR */
  163.  
  164. void crearLista(TLista *lista){
  165.     lista->inicio = NULL;
  166. }
  167.  
  168. void imprimeLista(TLista *lista){
  169.     TNodo *ptrRec;
  170.     ptrRec = lista->inicio;
  171.    
  172.     while (ptrRec != NULL){
  173.         printf(" %d ",ptrRec->elem);
  174.         ptrRec = ptrRec->ptrSig;
  175.     }
  176.     printf("NULL \n");
  177. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement