7、集合
来源:互联网 发布:win10网络时间同步 编辑:程序博客网 时间:2024/05/29 00:31
1、集合的特性:无序性、唯一性
2、集合运算
3、set.h
#ifndef _SET_H#define _SET_H#include "../Link-单链表/single_list.h"typedef List Set;#define set_size(set) set->sizevoid set_init(Set *set, int (*match)(const void *key1, void *key2), void (*destroy)(void *data));int set_insert(Set *set, const void *data);int set_remove(Set *set, const void *data);int set_union(Set *setu, const Set *set1, const Set *set2);int set_intersection(Set *seti, const Set *set1, const Set *set2);int set_difference(Set *setd, const Set *set1, const Set *set2);int set_is_mumber(const Set *set, const void *data);int set_is_subset(const Set *set1, const Set *set2);int set_is_equal(const Set *set1, const Set *set2); #endif
3、set.c
#include <stdio.h>#include "set.h"void set_init(Set *set, int (*match)(const void *key1, void *key2), void (*destroy)(void *data)){ list_init(set,destroy); set->match = match; return;}//集合中不存在该元素时,插入元素 (链表尾部插入) int set_insert(Set *set, const void *data){ if(set_is_mumber(set, data)) { return 1; } return list_ins_next(set,list_tail(set), data); }int set_remove(Set *set, const void *data){ List_Elmt *element,*prev=NULL; //找到时,element为该元素,prev是它前面的元素 for(element = list_head(set);element != NULL;element = element->next) { if(set->match(*data, list_data(element))) { break; } prev = element; } //没找到该元素 if(element ==NULL) return -1; return list_rem_next(set, prev, data);}//并集,先加入set1所有元素,在加入 set2和set1不同的元素 int set_union(Set *setu, const Set *set1, const Set *set2){ ListElmt *element; void *data; set_init(setu, set1->match, NULL); for(element = list_head(set1);element != NULL;element = element->next) { data = list_data(element); list_ins_next(setu, list_tail(setu), data); } for(element = list_head(set2);element != NULL;element = element->next) { if(set_is_mumber(set1, list_data(element))) { continue; } else{ data = list_data(element); list_ins_next(setu, list_tail(setu), data); } } return 0;}//交集,对set1每个元素判断是否在set2中也存在 ,加入两则相同的元素int set_intersection(Set *seti, const Set *set1, const Set *set2){ ListElmt *element; void *data; set_init(seti, set1->match, NULL); for(element = list_head(set1);element != NULL;element = element->next) { if(set_is_mumber(set2, list_data(element))) { data = list_data(element); list_ins_next(setu, list_tail(setu), data); } } return 0;}//差集,对set1每个元素判断是否在set2中也存在 ,若不存在则加入 int set_difference(Set *setd, const Set *set1, const Set *set2){ ListElmt *element; void *data; set_init(seti, set1->match, NULL); for(element = list_head(set1);element != NULL;element = element->next) { if(!set_is_mumber(set2, list_data(element))) { data = list_data(element); list_ins_next(setd, list_tail(setd), data); } } return 0;}//判断一个元素是不是集合成员 int set_is_mumber(const Set *set, const void *data){ ListElmt *element; for(element = list_head(set1);element != NULL;element = element->next) { if(set->match(data, list_data(menber))) return 1; } return 0;}//判断set1是不是set2的子集 int set_is_subset(const Set *set1, const Set *set2){ ListElmt *element; //子集数目不会大于父集 if(set_size(set1) > set_size(set2)) return -1; //如果set1中一个元素不属于set2,则不是set2的子集 for(element = list_head(set1);element != NULL;element = element->next) { if(!set_is_mumber(set2, list_data(menber))) return 0; } return 1;}//集合相等,则元素数目相同,且互为子集 int set_is_equal(const Set *set1, const Set *set2){ ListElmt *element; if(set1->size != set2->size) return -1; return set_is_subset(set1, set2);}
阅读全文
0 0
- 7、集合
- Java总结(7)集合
- Lession 7 集合框架
- Java-----7、集合
- [7]-集合类
- JAVA-7 集合框架
- 排序算法集合 -7
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- Scala集合基本操作(1)
- Codeforces 651E Table Compression 拓扑序
- Java设计模式--工厂方法模式
- 数组中Arrays工具类方法的应用
- 计蒜客 踩蚂蚁(优先队列)
- 7、集合
- 1101. Quick Sort (25)快排
- A
- 机器学习第三周(三)--正则化
- 大数据 (九)Hadoop-使用eclipe插件操作HDFS
- UVA12338Anti-Rhyme Pairs(哈希+二分最长前缀)
- hdu6063RXD and math(快速幂找规律)
- python random和numpy random
- 微信支付接口升级,微信支付免充值代金券开通