集合(c)
用结构体数组存储每个节点,
#define maxsize 20
//集合的表示
typedef struct settype {
int parent;//存储节点的父节点,若没有父节点,则a[i].parent=-1
int data;//存储节点的值
}stype[maxsize];
typedef struct settype* set;
//输入集合元素
int find(stype s[], int x) {//根据集合的值查找某元素所在集合,返回根节点
int i;
for ( i= 0; i < maxsize && s[i]->data != x; i++);
if (i >= maxsize) return -1;
for (; s[i]->parent >= 0; i = s[i]->parent);
return i;
}
合并集合
void Union(stype s[], int x, int y) {
int a = find(s,x);
int b = find(s,y);
if (a != b) s[a]->parent = b;//仅需将一个集合的父节点指向另一个集合的根节点
}