Closed mholgadoo closed 1 week ago
quiero saber si las funciones de union, interseccion y resta de conjuntos estan bien.
* /*Ejercicio 8 Hacer un T.A.D. para conjuntos: elementos no repetidos, sin orden. Debe tener al menos las funciones de agregar o remover un elemento, unión, intersección y resta de conjuntos. */ typedef struct node{ elemtype elem; struct node * tail; }TNode; typedef TNode * TList; struct setCDT{ TList first; size_t dim; //guardados size_t size; //espacio guardado compare cmp }; typedef struct setCDT * setADT; TList unionSetRec(TList l1, TList l2, size_t * added, compare cmp){ if (l1 == NULL && l2 == NULL){ return NULL; } Tlist new = malloc(sizeof(TNode)); (*added)++; int c; if (l2 == NULL || c = cmp(l1->elem, l2->elem) < 0){ new->elem = l1->elem; new->tail = unionSetRec(l1->tail, l2); }else if (l1 == NULL || c > 0){ new->elem = l2->elem; new->tail = unionSetRec(l1, l2->tail); }else{ new->elem = l1->elem; new->tail = unionSetRec(l1->tail, l2->tail); } return new; } //union de dos listas (como guarde ordenado es mas facil) setADT unionSet(setADT set1, setADT set2){ setADT new = malloc(sizeof(struct setCDT)); size_t dim = 0; new->first = unionSetRec(set1->first, set2->first, &dim, set1->cmp); new->size = new->dim = dim; return new; } TList intersectionSetRec(TList l1, TList l2, size_t * added, compare cmp){ if (l1 == NULL || l2 == NULL){ return NULL; } int c; if (c = cmp(l1->elem, l2->elem) < 0){ return intersectiontRec(l1->tail, l2); }else if (c > 0){ return intersectionRec(l1, l2->tail); }else{ Tlist new = malloc(sizeof(TNode)); (*added)++; new->elem = l1->elem; new->tail = intersectionRec(l1->tail, l2->tail); } return new; } setADT intersectionSet(setADT set1, setADT set2){ setADT new = malloc(sizeof(struct setCDT)); size_t dim = 0; new = intersectionSetRec(set1->first, set2->first, &dim, set1->cmp); new->size = new->dim = dim; return new; } TList diffSetRec(TList l1, TList l2, size_t * added, compare cmp){ if (l1 == NULL){ return NULL; } int c; if (l2 == NULL || c = cmp(l1->elem, l2->elem) < 0){ Tlist new = malloc(sizeof(TNode)); (*added)++; new->elem = l1->elem; new->tail = intersectiontRec(l1->tail, l2); }else if (c > 0){ return intersectionRec(l1, l2->tail); }else{ return intersectionRec(l1->tail, l2->tail); } return new; } *
precedencia if (c = cmp(l1->elem, l2->elem) < 0){
¿programa de prueba ?
quiero saber si las funciones de union, interseccion y resta de conjuntos estan bien.