集合介紹:集合是相關(guān)聯(lián)成員是無序組合香椎,且每個(gè)成員在集合中只出現(xiàn)一次漱竖。集合表示方式:S={1,2,3,4,5}。
一畜伐、集合性質(zhì)
1.集合與空集的交集是空集馍惹,集合與空集的并集是集合自身。
S?Φ = Φ ? ?S∪Φ = S
2.與集合自身求交/并集玛界,其結(jié)果還是集合自身
S?S = S ? ?S∪S = S
3.集合的交換律
S1?S2 = S2?S1? ? ? S1∪S2 = S2∪S1
4.集合的結(jié)合律
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));
返回值:無
描述:初始化由參數(shù)set指定的集合
復(fù)雜度:O(1)
——————————————————————————————————————
void set_destroy(Set *set);
返回值:無
描述:銷毀由set指向的集合
復(fù)雜度:O(n),n代表集合中元素個(gè)數(shù)
——————————————————————————————————————
int set_insert(Set *set, const void *data);
返回值:如果插入成功返回0慎框,如果插入的元素已經(jīng)存在返回1良狈,否則返回-1
描述:在set指定的集合中插入一個(gè)成員
復(fù)雜度:O(n)
——————————————————————————————————————
int set_remove(Set *set, void **data);
返回值:操作成功返回0,否則返回-1
描述:在由set指定的集合中移除數(shù)據(jù)域同data相吻合的成員
復(fù)雜度:O(n)
——————————————————————————————————————
int set_union(Set *setu, const Set *set1, const Set *set2);
返回值:如果合并成功返回0笨枯,否則返回-1
描述:將set1與set2進(jìn)行合并薪丁,建立新的集合setu
復(fù)雜度:O(mn),m和n分別代表set1和set2的元素個(gè)數(shù)
——————————————————————————————————————
int set_intersection(Set *seti, const Set *set1, const Set *set2);
返回值:如存在交集返回0馅精,否則返回-1
描述:將set1與set2取交集严嗜,建立新的交集seti
復(fù)雜度:O(mn),m和n分別代表set1和set2的元素個(gè)數(shù)
——————————————————————————————————————
int set_difference(Set *setd, const Set *set1, const Set *set2);
返回值:計(jì)算差值成功返回0洲敢,否則返回-1
描述:建立新的集合setd漫玄,其結(jié)果為S1與S2的差值
復(fù)雜度:O(mn),m和n分別代表set1和set2的元素個(gè)數(shù)
——————————————————————————————————————
int set_is_member(const Set *set, const void *data);
返回值:如果找到成員返回1沦疾,否則返回0
描述:判斷由data所指定成員是否存在于set指定的集合中
復(fù)雜度:O(n)称近,n為集合中元素個(gè)數(shù)
——————————————————————————————————————
int set_is_subset(const Set *set1, const Set *set2);
返回值:如果set1是set2子集則返回1第队,否則返回-1
描述:判斷set1指定集合是否為set2指定集合的子集
復(fù)雜度:O(mn),m和n分別代表set1和set2的元素個(gè)數(shù)
——————————————————————————————————————
int set_is_equal(const Set *set1, const Set *set2);
返回值:如果set1與set2相等則返回1刨秆,否則返回-1
描述:判斷set1指定集合是否與set2指定集合的相等
復(fù)雜度:O(mn)凳谦,m和n分別代表set1和set2的元素個(gè)數(shù)
——————————————————————————————————————
int set_size(const Set *set);
返回值:返回集合中元素個(gè)數(shù)
描述:這是一個(gè)宏,返回set指定集合的元素個(gè)數(shù)
復(fù)雜度:O(1)