数据结构之集合
集合介绍:集合是相关联成员是无序组合,且每个成员在集合中只出现一次。集合表示方式:S={1,2,3,4,5}。
一、集合性质
1.集合与空集的交集是空集,集合与空集的并集是集合自身。
S⋂Φ = Φ S∪Φ = S
2.与集合自身求交/并集,其结果还是集合自身
S⋂S = S S∪S = S
3.集合的交换律
S1⋂S2 = S2⋂S1 S1∪S2 = S2∪S1
4.集合的结合律
S1⋂(S2⋂S3) = (S1⋂S2)⋂S3
S1∪(S2∪S3) = (S1∪S2)∪S3
5.集合的分配律
S1∪(S2⋂S3) = (S1∪S2)⋂(S1∪S3)
S1⋂(S2∪S3) = (S1⋂S2)∪(S1⋂S3)
6.集合的合并律
S1⋂(S1∪S2) = S1
S1∪(S1⋂S2) = S1
7.集合的德摩根定律
S1 - (S2∪S3) = (S1-S2)⋂(S1-S3)
S1 - (S2⋂S3) = (S1-S2)∪(S1-S3)
二、集合接口定义
void set_init(Set *set, int (*match)(const void *key1, const void *key2), void (*destroy)(void *data));
返回值:无
描述:初始化由参数set指定的集合
复杂度:O(1)
——————————————————————————————————————
void set_destroy(Set *set);
返回值:无
描述:销毁由set指向的集合
复杂度:O(n),n代表集合中元素个数
——————————————————————————————————————
int set_insert(Set *set, const void *data);
返回值:如果插入成功返回0,如果插入的元素已经存在返回1,否则返回-1
描述:在set指定的集合中插入一个成员
复杂度:O(n)
——————————————————————————————————————
int set_remove(Set *set, void **data);
返回值:操作成功返回0,否则返回-1
描述:在由set指定的集合中移除数据域同data相吻合的成员
复杂度:O(n)
——————————————————————————————————————
int set_union(Set *setu, const Set *set1, const Set *set2);
返回值:如果合并成功返回0,否则返回-1
描述:将set1与set2进行合并,建立新的集合setu
复杂度:O(mn),m和n分别代表set1和set2的元素个数
——————————————————————————————————————
int set_intersection(Set *seti, const Set *set1, const Set *set2);
返回值:如存在交集返回0,否则返回-1
描述:将set1与set2取交集,建立新的交集seti
复杂度:O(mn),m和n分别代表set1和set2的元素个数
——————————————————————————————————————
int set_difference(Set *setd, const Set *set1, const Set *set2);
返回值:计算差值成功返回0,否则返回-1
描述:建立新的集合setd,其结果为S1与S2的差值
复杂度:O(mn),m和n分别代表set1和set2的元素个数
——————————————————————————————————————
int set_is_member(const Set *set, const void *data);
返回值:如果找到成员返回1,否则返回0
描述:判断由data所指定成员是否存在于set指定的集合中
复杂度:O(n),n为集合中元素个数
——————————————————————————————————————
int set_is_subset(const Set *set1, const Set *set2);
返回值:如果set1是set2子集则返回1,否则返回-1
描述:判断set1指定集合是否为set2指定集合的子集
复杂度:O(mn),m和n分别代表set1和set2的元素个数
——————————————————————————————————————
int set_is_equal(const Set *set1, const Set *set2);
返回值:如果set1与set2相等则返回1,否则返回-1
描述:判断set1指定集合是否与set2指定集合的相等
复杂度:O(mn),m和n分别代表set1和set2的元素个数
——————————————————————————————————————
int set_size(const Set *set);
返回值:返回集合中元素个数
描述:这是一个宏,返回set指定集合的元素个数
复杂度:O(1)