Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int eliminarPorClaveD(tLista *lista,void *dato,unsigned cantB,int (*cmp)(const void *dato1,const void* dato2));
- int eliminarPorClaveO(tLista *lista,void *dato,unsigned cantB,int (*cmp)(const void *dato1,const void* dato2));
- void loteDePruebas(tLista *lista);
- void mostrarEstruc(const void *estruc);
- void procesarLista(tLista *lista,int (*cmp)(const void*,const void*),void (*accion)(void*,const void*));
- int compEstruc(const void* dato1,const void* dato2);
- void sumarPedidos(void* estruc1, const void* estruc2);
- typedef struct
- {
- int cod;
- char desc[100];
- unsigned cantP;
- }tPedidos;
- int eliminarPorClaveD(tLista *lista,void *dato,unsigned cantB,int (*cmp)(const void *dato1,const void* dato2))
- {
- tNodo *elim;
- while(*lista && cmp(dato,(*lista)->dato)!= 0)
- lista=&(*lista)->sig;
- if(!(*lista))
- return 0;
- memcpy(dato,(*lista)->dato,MINIMO((*lista)->cantB,cantB));
- elim=(*lista);
- *lista=elim->sig;
- free(elim->dato);
- free(elim);
- return 1;
- }
- //int eliminarPorClaveD1(*tLista *lista,void *dato,unsigned cantB,int (*cmp)(const void *dato1,const void* dato2))
- //{
- //tNodo *elim;
- //
- //
- //while(*lista)
- //{
- // if(cmp(dato,(*lista)->dato) == 0)
- // {
- // memcpy(dato,(*lista)->dato,MINIMO((*lista)->cantB,cantB));
- //
- // elim=(*lista);
- //
- // *lista=elim->sig;
- //
- // free(elim->dato);
- // free(elim);
- //
- // return 1;
- // }
- // lista=&(*lista)->sig;
- //}
- //
- //return 0;
- //}
- int eliminarPorClaveO(tLista *lista,void *dato,unsigned cantB,int (*cmp)(const void *dato1,const void* dato2))
- {
- tNodo *elim;
- int comp=1;
- while(*lista && (comp=cmp(dato,(*lista)->dato)) > 0)
- lista=&(*lista)->sig;
- if(comp == 0)
- {
- memcpy(dato,(*lista)->dato,MINIMO((*lista)->cantB,cantB));
- elim=(*lista);
- *lista=elim->sig;
- free(elim->dato);
- free(elim);
- return 1;
- }
- return 0;
- }
- void loteDePruebas(tLista *lista)
- {
- tPedidos vec[]=
- {
- {23,"Resma",70},
- {56,"pepe",15},
- {15,"Papel",15},
- {23,"Ricardo",10},
- {16,"Papel",15},
- {15,"Papel",15},
- {15,"Papel",15},
- {23,"papel",40},
- {15,"Papel",15}
- };
- int i;
- for(i=0;i<sizeof(vec)/sizeof(tPedidos);i++)
- ponerOrdenado(lista,&vec[i],sizeof(tPedidos),compEstruc);
- }
- void mostrarEstruc(const void *estruc)
- {
- tPedidos *pedido=(tPedidos*) estruc;
- printf("cod= %d\tdesc= %s\tcantidad pedida= %u\n",pedido->cod,pedido->desc,pedido->cantP);
- }
- int compEstruc(const void* dato1,const void* dato2)
- {
- tPedidos *pedido=(tPedidos*) dato1;
- tPedidos *pedido2=(tPedidos*) dato2;
- int result;
- if((result=pedido->cod-pedido2->cod)==0)
- return *pedido->desc-*pedido2->desc;
- return result;
- }
- void procesarLista(tLista *lista,int (*cmp)(const void*,const void*),void (*accion)(void*,const void*))
- {
- tNodo *elim;
- while(*lista)
- {
- while((*lista)->sig && !cmp((*lista)->dato,(*lista)->sig->dato))
- {
- elim=(*lista)->sig;
- accion((*lista)->dato,elim->dato);
- (*lista)->sig=elim->sig;
- free(elim->dato);
- free(elim);
- }
- lista=&(*lista)->sig;
- }
- }
- void sumarPedidos(void* estruc1, const void* estruc2)
- {
- ((tPedidos*)estruc1)->cantP+=((tPedidos*)estruc2)->cantP;
- }
Advertisement
Add Comment
Please, Sign In to add comment