美文网首页
数据结构之集合

数据结构之集合

作者: super_zou | 来源:发表于2017-04-25 19:57 被阅读0次

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

    相关文章

      网友评论

          本文标题:数据结构之集合

          本文链接:https://www.haomeiwen.com/subject/leuyzttx.html