• 集合接口的定义


    集合的属性和操作接口包括:集合的初始化、集合的销毁、集合元素的插入、移除,两个集合的并集、子集、差集操作,两个集合的相等判断等。

    set_init


    void set_init(Set *set,int(*match)(vonst void *key1,const void *key2),void (*destroy)(void *data));

    返回值:无

    描述初始化由参数set指定的集合。该函数必须在其他操作之前调用。

    参数match是一个函数指针,用来在各种集合操作中判断两个成员是否匹配。如果key1等于key2,则match函数应返回1;否则返回0。

    参数destroy提供了一种释放动态分配空间的方法。destroy应该设置为一个由用户自定义的析构函数来释放每个动态分配的成员以及结构体本身所占用的内存空间。如果集合包含的数据不应该被释放的话,destroy应该被设置为NULL。

    复杂度:O(1)

    set_destroy


    void set_destroy(Set *set);

    返回值:无

    描述销毁由参数set所指定的集合。

    调用set_destroy后集合的其他操作都不允许再执行,除非再次调用set_init。set_destroy操作将集合中的所有成员都移除,如果传递给set_init的参数destroy不为NULL的话,则调用destroy所指定的函数,对集合中每个移除的元素施行资源回收操作。

    复杂度:O(n),这里n代表集合中的元素的个数。

    set_insert


    int set_insert(Set *set ,const void *data);

    返回值:如果插入操作成功则返回0,如果插入的成员在集合中已经存在返回1,否则返回-1。

    描述在由参数set所指定的集合中插入一个成员。新成员包含一个指向data的指针,因此只要该成员还在集合中,则data所引用的内存空间就应该保持合法。由调用者负责管理data所关联的存储空间。

    复杂度:O(n),这里n代表集合中的元素个数。

    set_remove


    int set_remove(Set *set ,const void **data);

    返回值:如果移除操作成功则返回0,否则返回-1。

    描述在由参数set所指定的集合中移除数据域同data相吻合的成员。函数返回后,data指向移除的成员的数据部分。由调用者负责管理data所关联的存储空间

    复杂度:O(n),这里n代表集合中的元素个数。

     set_union


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

    返回值:如果计算并集成功则返回0;否则返回-1 。

    描述:建立一个集合,其结果是set1和set2所指定的集合的并集。返回后setu就代表这个并集。

    因为setu指向set1和set2中成员的数据域,所以set1和set2中的数据必须保持合法,直到setu被set_destroy销毁。

    复杂度:O(mn),这里的m和n分别代表集合set1和set2中的元素个数。

     set_intersection


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

    返回值:如果计算交集成功则返回0;否则返回-1 。

    描述:建立一个集合,其结果是set1和set2所指定的集合的交集。返回后seti就代表这个交集。

    因为seti指向set1中的成员的数据域,所以set1中的数据必须保持合法,直到seti被set_destroy销毁。

    复杂度:O(mn),这里的m和n分别代表集合set1和set2中的元素个数。

     set_difference


    int set_difference(Set *setd, const Set *set1, const Set *set2);

    返回值:如果计算差集成功则返回0;否则返回-1 。

    描述:建立一个集合,其结果是set1和set2所指定的集合的差集。返回后setd就代表这个差集。

    因为setd指向set1中的成员的数据域,所以set1中的数据必须保持合法,直到setd被set_destroy销毁。

    复杂度:O(mn),这里的m和n分别代表集合set1和set2中的元素个数。

    set_is_member


    int set_is_member(const Set *set, const void *data);

    返回值:如果找到成员返回1;否则返回0。

    描述:判断由data所指定的成员是否存在于set所指定的集合中。

    复杂度:O(n),这里n代表集合中的元素的个数。

    set_is_subset


    int set_is_subset(const Set *set1, const Set *set2);

    返回值:如果set1是set2的子集返回1;否则返回-1。

    描述:判断由参数set1所指定的集合是否为参数set2所指定集合的子集。

    复杂度:O(mn),这里m、n分别代表集合set1和set2中的元素的个数。

    set_is_equal


    int set_is_equal(const Set *set1, const Set *set2);

    返回值:如果set1和set2相等返回1;否则返回-1。

    描述:判断由参数set1所指定的集合是否等于由参数set2所指定集合

    复杂度:O(mn),这里m、n分别代表集合set1和set2中的元素的个数。

    set_size


    int set_size(const Set *set);

    返回值:返回集合中的元素个数。

    描述:这是一个宏,用来返回由参数set所指定的集合中的元素个数。

    复杂度:O(1)

  • 相关阅读:
    Google搜索引擎如何运作:不会手动调整结果
    一个Ruby脚本
    IE灭绝!?
    除Windows之外的其他操作系统
    刚收到的新书
    奇怪的计算机语言
    小巧的menuetOS
    Ruby学习笔记(1)
    一个通知
    总结 asp.net 和 javascript获取本地IP(MAC)和服务器IP(MAC)的方法
  • 原文地址:https://www.cnblogs.com/idreamo/p/7907056.html
Copyright © 2020-2023  润新知