数据结构之集合

2017-04-25  本文已影响0人  super_zou

集合介绍:集合是相关联成员是无序组合,且每个成员在集合中只出现一次。集合表示方式: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)

上一篇下一篇

猜你喜欢

热点阅读