j
你这个是数集还是字符集,还是都有呢?
集合是一种比较重要的数据结构,比较正规的是先定义这个数据结构:
#ifndef SET_H_
#define SET_H_
typedef struct Set {
char elements[128];
} Set;
// 初始为空
void MakeEmpty(Set *set);
// 计算元素数目
int GetSize(Set *set);
// 是否包含某元素
int Contain(Set *set,char element);
// 添加元素
void AddElement(Set *set,char element);
// 删减元素
void DeleteElement(Set *set,char element);
// 并运算
Set Join(Set *A,Set *B);
// 交运算
Set Meet(Set *A,Set *B);
// 减法运算
Set Sub(Set *A,Set *B);
// 对称差运算
Set SymmetricalSub(Set *A,Set *B);
#endif
保存这个文件为Set.h
然后再在一个C文件中对其中的函数给以实现
// file : Set.c
#include "Set.h"
#include
// 初始化为空 => Done
void MakeEmpty(Set *set){
int i;
for(i=0;i<128;i++){
(*set).elements[i]=0;
}
}
// 获得大小 => Done
int GetSize(Set *set){
int Size=0;
int i;
for(i=0;i<128;i++){
if((*set).elements[i]==0)
break;
else {
Size++;
}
}
return Size;
}
// 是否包含指定元素 => Done
int Contain(Set *set,char element){
int Contain=0;
int i;
int Size=GetSize(set);
for(i=0;i
Contain=1;
break;
}
}
return Contain;
}
// 新加一个元素 => Done
void AddElement(Set *set,char element){
int Size=GetSize(set);
int exist=0;
int count;
for(count=0;count
exist=1;
break;
}
}
if(!exist){
(*set).elements[Size]=element;
}
}
// 删除一个元素 =>Done
void DeleteElement(Set *set,char element){
int Size=GetSize(set);
int MarkPosition=-1;
int i;
for(i=0;i
MarkPosition=i;
break;
}
}
if(MarkPosition>=0){
for(i=MarkPosition;i
}
(*set).elements[Size-1]=0;
}
}
// 并运算 => Done
// 不得不承认,该算法是最差的算法
Set Join(Set *A,Set *B){
// 以A集合为基准集合,如果A中不含有B中某元素,就把B集合中的元素加入到A
Set set=*A;
int Size=GetSize(B);
int i;
for(i=0;i
AddElement(&set,(*B).elements[i]);
}
}
// 在return的时候,set这段内存就已经被释放了
return set;
}
// 交运算 => Done
Set Meet(Set *A,Set *B){
Set set;
int SizeOfA=GetSize(A);
int i;
MakeEmpty(&set);
for(i=0;i
AddElement(&set,(*A).elements[i]);
}
}
return set;
}
// 差运算 A-B => Done
Set Sub(Set *A,Set *B){
Set set=*A;
int Size=GetSize(B);
int i;
for(i=0;i
DeleteElement(&set,(*B).elements[i]);
}
}
return set;
}
// 对称差运算 => Done
Set SymmetricalSub(Set *A,Set *B){
Set set1=Join(A,B);
Set set2=Meet(A,B);
Set set=Sub(&set1,&set2);
return set;
}
这个保存为Set.c
之后就可以编写你自己的程序了,我简单的写了一个:
#include
#include "Set.h"
int main(){
Set A;
Set B;
Set C;
MakeEmpty(&A);
MakeEmpty(&B);
AddElement(&A,'A');
AddElement(&A,'C');
AddElement(&A,'D');
AddElement(&B,'B');
AddElement(&B,'C');
C=SymmetricalSub(&A,&B);
printf("Now , the size of C : %d \n", GetSize(&C));
}
希望能帮到您。