Online Book Reader

Home Category

Mastering Algorithms With C - Kyle Loudon [59]

By Root 1450 0

* *

* Insert the data. *

* *

*****************************************************************************/

return list_ins_next(set, list_tail(set), data);

}

/*****************************************************************************

* *

* ------------------------------ set_remove ------------------------------ *

* *

*****************************************************************************/

int set_remove(Set *set, void **data) {

ListElmt *member,

*prev;

/*****************************************************************************

* *

* Find the member to remove. *

* *

*****************************************************************************/

prev = NULL;

for (member = list_head(set); member != NULL; member = list_next(member)) {

if (set->match(*data, list_data(member)))

break;

prev = member;

}

/*****************************************************************************

* *

* Return if the member was not found. *

* *

*****************************************************************************/

if (member == NULL)

return -1;

/*****************************************************************************

* *

* Remove the member. *

* *

*****************************************************************************/

return list_rem_next(set, prev, data);

}

/*****************************************************************************

* *

* ------------------------------- set_union ------------------------------ *

* *

*****************************************************************************/

int set_union(Set *setu, const Set *set1, const Set *set2) {

ListElmt *member;

void *data;

/*****************************************************************************

* *

* Initialize the set for the union. *

* *

*****************************************************************************/

set_init(setu, set1->match, NULL);

/*****************************************************************************

* *

* Insert the members of the first set. *

* *

*****************************************************************************/

for (member = list_head(set1); member != NULL; member = list_next(member)) {

data = list_data(member);

if (list_ins_next(setu, list_tail(setu), data) != 0) {

set_destroy(setu);

return -1;

}

}

/*****************************************************************************

* *

* Insert the members of the second set. *

* *

*****************************************************************************/

for (member = list_head(set2); member != NULL; member = list_next(member)) {

if (set_is_member(set1, list_data(member))) {

/***********************************************************************

* *

* Do not allow the insertion of duplicates. *

* *

***********************************************************************/

continue;

}

else {

data = list_data(member);

if (list_ins_next(setu, list_tail(setu), data) != 0) {

set_destroy(setu);

return -1;

}

}

}

return 0;

}

/*****************************************************************************

* *

* --------------------------- set_intersection --------------------------- *

* *

*****************************************************************************/

int set_intersection(Set *seti, const Set *set1, const Set *set2) {

ListElmt *member;

void *data;

/*****************************************************************************

* *

* Initialize the set for the intersection. *

* *

*****************************************************************************/

set_init(seti, set1->match, NULL);

/*****************************************************************************

* *

* Insert the members present in both sets. *

* *

*****************************************************************************/

for (member = list_head(set1); member != NULL; member = list_next(member)) {

if (set_is_member(set2, list_data(member))) {

data = list_data(member);

Return Main Page Previous Page Next Page

®Online Book Reader