数据结构 集合_集合接口的定义

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所指定的集合中的元素个数。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygwzs.html