#include <string.h>
#include <conio.h>
#define ARR_LEN 255 /*数组长度上限*/
#define elemType char /* 集合元素数据类型 */
/* 集合数据结构 */
typedef struct set {
elemType data[ARR_LEN]
int length
} set
/* 初始化集合 */
void initSet (set *S) {
S->length = 0
}
/* 交集 */
/* A与B的交集(A∩B):既属于A又属于B的元素构成的集合 */
int setIntersection (set A, set B, set *dest) {
int i = 0, j = 0, k = 0
dest->length = 0
for (i=0 i<A.length i++) { /* 外循环遍历A */
for (j=0 j<B.length j++) { /* 内循环遍历B */
if (A.data[i] == 迹培B.data[j]) { /* 简禅既属于A又属于B的元素,存入dest */
dest->data[k] = A.data[i]
k++
}
}
}
dest->length = k
if (dest->length)
return 1
else
return 0
}
/* 并集 */
/* A与B的并集(A∪B):A与B所有元素构成的集合 */
int setUnion (set A, set B, set *dest) {
int i = 0, j = 0, k = 0
dest->length = 0
for (i=0 i<A.length i++) { /* 外循环遍历A */
for (j=0 j<B.length j++) { /* 内循环遍历B */
if (A.data[i] == B.data[j]) /* 既属于A又属于B的元素,跳过 */
break
}
if (j == B.length) { /* 属于A但不属于B的元素,存入dest */
dest->data[k] = A.data[i]
k++
}
}
for (j=0 j<B.length j++) { /* B的所有元素,存入dest */
dest->data[k] = B.data[j]
k++
}
dest->length = k
if (dest->length)
return 1
else
return 0
}
/* 补集 */
/* B在A中的相对补集(A\B):属于A但不属于B的元素构成的集合 */
int setComplement (set A, set B, set *dest) {
int i = 0, j = 0, k = 0
dest->length = 0
for (i=0 i<A.length i++) { /* 外循环遍历A */
for (j=0 j<B.length j++) { /* 内循环遍历B */
if (A.data[i] == B.data[j]) /* 既属于A又属于B的元素,跳过 */
break
}
if (j == B.length) { /* 属于A但不属于B的元素,存入dest */
dest->data[k] = A.data[i]
k++
}
}
dest->length = k
if (dest->length)
return 1
else
return 0
}
/* 打印集合内容 */
int printSet (set S) {
int i
if (S.length == 0) {
puts ("The set is empty! ")
return 0
}
for (i=0 i<S.length i++)
printf ("%c", S.data[i])
putchar ('\n')
return 1
}
int main (void) {
set A, B
set AIB, AUB, ACB /* 交集、并集、拦州尘补集 */
initSet (&A) initSet (&B)
initSet (&AIB) initSet (&AUB) initSet (&ACB)
strcpy (A.data, "123")
A.length = strlen (A.data)
strcpy (B.data, "4532")
B.length = strlen (B.data)
printf ("A:\t")
printSet (A)
printf ("B:\t")
printSet (B)
putchar ('\n')
printf ("A∩B:\t")
setIntersection (A, B, &AIB)
printSet (AIB)
printf ("A∪B:\t")
setUnion (A, B, &AUB)
printSet (AUB)
printf ("A\B:\t")
setComplement (A, B, &ACB)
printSet (ACB)
getch () /*屏幕暂留*/
return 0
}
定义两个数组存放这两个集合,再定义银让一个数组存放它们的集合,用锋迹局类似冒泡排序的算法,遍历数组1中的第一个元素和数组2中每一个元素,若有相同的,州昌则把这个元素放入第三个数组,继续遍历,知道数组1遍历完所有元素,那数组3中的元素,即为两个数组(集合)的交集。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)