juan_de99

Untitled

Nov 4th, 2020
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.46 KB | None | 0 0
  1. int eliminarPorClaveD(tLista *lista,void *dato,unsigned cantB,int (*cmp)(const void *dato1,const void* dato2));
  2. int eliminarPorClaveO(tLista *lista,void *dato,unsigned cantB,int (*cmp)(const void *dato1,const void* dato2));
  3. void loteDePruebas(tLista *lista);
  4. void mostrarEstruc(const void *estruc);
  5. void procesarLista(tLista *lista,int (*cmp)(const void*,const void*),void (*accion)(void*,const void*));
  6. int compEstruc(const void* dato1,const void* dato2);
  7. void sumarPedidos(void* estruc1, const void* estruc2);
  8.  
  9. typedef struct
  10. {
  11.     int cod;
  12.     char desc[100];
  13.     unsigned cantP;
  14. }tPedidos;
  15.  
  16. int eliminarPorClaveD(tLista *lista,void *dato,unsigned cantB,int (*cmp)(const void *dato1,const void* dato2))
  17. {
  18.     tNodo *elim;
  19.  
  20.  
  21.     while(*lista && cmp(dato,(*lista)->dato)!= 0)
  22.         lista=&(*lista)->sig;
  23.  
  24.     if(!(*lista))
  25.         return 0;
  26.  
  27.     memcpy(dato,(*lista)->dato,MINIMO((*lista)->cantB,cantB));
  28.  
  29.     elim=(*lista);
  30.  
  31.     *lista=elim->sig;
  32.  
  33.     free(elim->dato);
  34.     free(elim);
  35.  
  36.     return 1;
  37. }
  38.  
  39. //int eliminarPorClaveD1(*tLista *lista,void *dato,unsigned cantB,int (*cmp)(const void *dato1,const void* dato2))
  40. //{
  41. //tNodo *elim;
  42. //
  43. //
  44. //while(*lista)
  45. //{
  46. //    if(cmp(dato,(*lista)->dato) == 0)
  47. //    {
  48. //        memcpy(dato,(*lista)->dato,MINIMO((*lista)->cantB,cantB));
  49. //
  50. //        elim=(*lista);
  51. //
  52. //        *lista=elim->sig;
  53. //
  54. //        free(elim->dato);
  55. //        free(elim);
  56. //
  57. //        return 1;
  58. //    }
  59. //    lista=&(*lista)->sig;
  60. //}
  61. //
  62. //return 0;
  63. //}
  64.  
  65. int eliminarPorClaveO(tLista *lista,void *dato,unsigned cantB,int (*cmp)(const void *dato1,const void* dato2))
  66. {
  67.     tNodo *elim;
  68.     int comp=1;
  69.  
  70.     while(*lista && (comp=cmp(dato,(*lista)->dato)) > 0)
  71.         lista=&(*lista)->sig;
  72.  
  73.     if(comp == 0)
  74.     {
  75.         memcpy(dato,(*lista)->dato,MINIMO((*lista)->cantB,cantB));
  76.  
  77.         elim=(*lista);
  78.  
  79.         *lista=elim->sig;
  80.  
  81.         free(elim->dato);
  82.         free(elim);
  83.  
  84.         return 1;
  85.  
  86.     }
  87.  
  88.     return 0;
  89. }
  90.  
  91. void loteDePruebas(tLista *lista)
  92. {
  93.     tPedidos vec[]=
  94.     {
  95.         {23,"Resma",70},
  96.         {56,"pepe",15},
  97.         {15,"Papel",15},
  98.         {23,"Ricardo",10},
  99.         {16,"Papel",15},
  100.         {15,"Papel",15},
  101.         {15,"Papel",15},
  102.         {23,"papel",40},
  103.         {15,"Papel",15}
  104.     };
  105.     int i;
  106.  
  107.     for(i=0;i<sizeof(vec)/sizeof(tPedidos);i++)
  108.         ponerOrdenado(lista,&vec[i],sizeof(tPedidos),compEstruc);
  109. }
  110.  
  111. void mostrarEstruc(const void *estruc)
  112. {
  113.     tPedidos *pedido=(tPedidos*) estruc;
  114.  
  115.     printf("cod= %d\tdesc= %s\tcantidad pedida= %u\n",pedido->cod,pedido->desc,pedido->cantP);
  116.  
  117. }
  118.  
  119. int compEstruc(const void* dato1,const void* dato2)
  120. {
  121.     tPedidos *pedido=(tPedidos*) dato1;
  122.     tPedidos *pedido2=(tPedidos*) dato2;
  123.     int result;
  124.  
  125.     if((result=pedido->cod-pedido2->cod)==0)
  126.         return *pedido->desc-*pedido2->desc;
  127.  
  128.     return result;
  129. }
  130.  
  131. void procesarLista(tLista *lista,int (*cmp)(const void*,const void*),void (*accion)(void*,const void*))
  132. {
  133.     tNodo *elim;
  134.  
  135.     while(*lista)
  136.     {
  137.  
  138.         while((*lista)->sig && !cmp((*lista)->dato,(*lista)->sig->dato))
  139.         {
  140.             elim=(*lista)->sig;
  141.             accion((*lista)->dato,elim->dato);
  142.             (*lista)->sig=elim->sig;
  143.             free(elim->dato);
  144.             free(elim);
  145.         }
  146.         lista=&(*lista)->sig;
  147.     }
  148. }
  149.  
  150. void sumarPedidos(void* estruc1, const void* estruc2)
  151. {
  152.     ((tPedidos*)estruc1)->cantP+=((tPedidos*)estruc2)->cantP;
  153. }
Advertisement
Add Comment
Please, Sign In to add comment