怎样用语言c语言实现集合的合并,交集?

Python013

怎样用语言c语言实现集合的合并,交集?,第1张

通过你描述的问题,正确的交集代码如下:

void bing(char a[],char b[],int m,int n)

{ char d[400]

int i=0,j=0,s=m

for(i=0i<mi++)

d[i]=a[i]

for(i=0i<ni++){

for(j=0j<mj++)

{

if(b[i]==a[j]) break

}

if(j==m) d[s++]=b[i]

}

cout<<"集合并集是:"

for(i=0i<si++)

cout<<d[i]<<" "

}

#include <stdio.h>

#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

}