数组集合的交运算源码_计算数组交集

hacker|
119

文章目录:

如何写一个c语言程序求两个集合的交集

定义两个数组存放这两个集合,再定义一个数组存放它们的集合,用类似冒泡排序的算法,遍历数组1中的第一个元素和数组2中每一个元素,若有相同的,则把这个元素放入第三个数组,继续遍历,知道数组1遍历完所有元素,那数组3中的元素,即为两个数组(集合)的交集。

如何用数组实现集合的并,交和差运算

#include stdio.h

#include stdlib.h

#include iostream

using namespace std;

//交集

void Intersection(int a[], int b[], int m, int n)

{

cout"两集合交集:";

for(int i = 0; i m; i++)

{

for(int j = 0; j n; j++)

{

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

{

couta[i]' ';

break;

}

}

}

coutendl;

}

//并集

void AddSets(int a[], int b[], int m, int n)

{

int flag;

cout"两集合并集:";

for(int i = 0; i m; i++)

{

flag = true;

for(int j = 0; j n; j++)

{

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

{

flag = false;

break;

}

}

if(flag) couta[i]' ';

}

for(int j = 0; j n; j++)

{

coutb[j]' ';

}

coutendl;

}

//差集

void SubSets(int a[], int b[], int m, int n)

{

int flag;

cout"两集合差集:";

for(int i = 0; i m; i++)

{

flag = true;

for(int j = 0; j n; j++)

{

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

{

flag = false;

break;

}

}

if(flag) couta[i]' ';

}

coutendl;

}

void main()

{

int n1;

int n2;

int a[100];

int b[100];

cout"请输入第一个数组大小:";

cinn1;

cout"请输入第一个数组元素:";

for (int i = 0; i n1; i++)

{

cina[i];

}

cout"请输入第二个数组大小:";

cinn2;

cout"请输入第二个数组元素:";

for (i = 0; i n2; i++)

{

cinb[i];

}

Intersection(a, b, n1, n2);

AddSets(a, b, n1, n2);

SubSets(a, b, n1, n2);

getchar();

}

数据结构 用c语言写的 集合的并、交和差运算的程序

可以用二个一维数组,

再用两个for循环来判断结果:交,并,差

在for循环中,用一个if来判断一下,是不是a[0]==b[j],只要有相等的,就令之放在c[0]

这就是交集!!

并集就好求吧,

只要令c[i]=a[i],再来一个就是c[i+j+1]=b[j](因为我这里是考虑j=0开始的,然后自加差就是在交上改动一下就可以了,只要是a[0]!=b[j],就把它放到c[]这个数组里面去~!!!!

1:并集的程序。

求集合LA和集合LB的并集

#define NULL 0

struct JD

{ int data;

struct JD *next;

};

int find(int number,struct JD *h)

{ while(h-data)

{ if(h-data!=number)

{ h=h-next;

continue;

}

else

return 0;

}

return 1;

}

struct JD * make()

{ struct JD *h=NULL,*p=NULL;

int number,tf;

h=(struct JD *)malloc(sizeof(struct JD));

scanf("%d",h-data);

p=h;

while(p-data)

{ p-next=(struct JD *)malloc(sizeof(struct JD));

p=p-next;

p-data=0;

scanf("%d",number);

tf=find(number,h);

if(tf)

p-data=number;

else

continue;

}

return h;

}

void print(struct JD *h)

{ while(h-data)

{ printf("%d ",h-data);

h=h-next;

}

}

struct JD * change(struct JD *la,struct JD *lb)

{ struct JD *h,*p,*s,*q;

int number,tf;

p=lb;

while(p-data)

{ number=p-data;

tf=find(number,la);

p=p-next;

if(tf)

{ s=(struct JD *)malloc(sizeof(struct JD));

s-data=number;

s-next=la;

la=s;

}

else

continue;

}

return la;

}

void del(struct JD *h)

{ struct JD *p=h-next;

while(h-data)

{ free(h);

h=p;

p=p-next;

}

free(h);

}

main()

{ struct JD *la,*lb;

printf("\n\nGive the number to LA :\n\n");

la=make();

printf("\nLA is: ");

print(la);

printf("\n\nGive the number to LB :\n\n");

lb=make();

printf("\nLB is: ");

print(lb);

la=change(la,lb);

printf("\n\n\nThe new LA=LA||LB is: ");

print(la);

del(la);

del(lb);

printf("\n\n\nPass any key to exit...!\n");

getch();

}

********** 程序运行结果 **********

Give the number to LA :

1↓

2↓

3↓

5↓

0↓

LA is: 1 2 3 5

Give the number to LB :

6↓

7↓

3↓

2↓

9↓

0↓

LB is: 6 7 3 2 9

The new LA=LA||LB is: 9 7 6 1 2 3 5

--------------------------------------------------

Pass any key to exit...!

C++在类中实现集合的交,并,差运算,怎么做呀?

1,是否属于集合,就拿这个元素和集合里面的比较啊,如果想等就存在。

2,实现并,就是拿一个集合A里面的一个元素,和另外一个集合B的元素比较,如果想等就不要这个A中元素。不想等就把A中这个元素加入到B中,前提是B数组足够大。也可以再建立个C集合。

3,实现交 ,就是把集合A中元素和集合B中元素想等的取出来,放到C中。

上面主要是利用for 循环进行。

C语言用函数指针和数组指针求两个集合的交、并集?

#includestdio.h

#includestdlib.h

#includetime.h

#define NUMBER1 7

#define NUMBER2 5

void createCollect(int [],int);

void display(int [],int);

int main()

{

int collection1[NUMBER1];

int collection2[NUMBER2];

int collection3[NUMBER1+NUMBER2];

int i,j,label=0;

createCollect(collection1,NUMBER1);

for(j = 0;j NUMBER2;j++)

{

collection2[j]=j*2;

}

printf("集合1:");

display(collection1,NUMBER1);

printf("集合2:");

display(collection2,NUMBER2);

for(i = 0; i NUMBER1;i++)

{

//从集合1中取出元素,去遍历集合2中的所有元素

for(j = 0;j NUMBER2;j++)

{

//如果相同则跳出遍历

if(collection1[i]==collection2[j])

break;

}

//判断:此时存在两种情况1) 当前集合1的元素与集合2的元素相同

//2)遍历完了集合2的数组后不存在相同的元素

if(j == NUMBER2)

{

collection3[label]=collection1[i];

label++;

}

}

//把集合2的所有元素存进collection3中

for(j = 0;j NUMBER2;j++)

{

collection3[label++]=collection2[j];

}

printf("集合1与集合2的并集为:\n");

display(collection3,label);

return 0;

}

//随机生成一个不含重复元素的数组

void createCollect(int num[],int count)

{

//randValue:临时随机数存放变量

//condition:循环生成不重复的条件

int i,j,randValue,condition;

srand(time(NULL));

for(i=0;icount;i++)

{

condition=1;

while(condition){

randValue=1+(int)rand()%10;

for(j = 0;j = i;j++){

if(i==0){//第一个数不可能存在重复数,可以直接赋值

condition=0;

break;

}

if(randValue==num[j])

break;

if(randValue!=num[j]j==i-1)//当生成的随机数与当前数组最后一位不同并且下标相等时

{

condition=0;

break;

}

}

}

num[i]=randValue;

}

}

//打印数组

void display(int num[],int count)

{

int i;

for(i=0;icount;i++)

{

printf("%d\t",num[i]);

}

printf("\n");

}

编写程序,实现两个集合的交运算(用C语言)

#includestdio.h

#includestring.h

int jiaoji(int A[],int B[],int a,int b)

{

int i,j,t;

t=a;

for(i=0;ia;i++)

for(j=0;jb;j++)

{

if(A[i]==B[j])

{

A[t]=B[j];

t++;

}

}

for(i=0;it-a;i++)

{

  A[i]=A[a+i];

}

return t-a;

}

int main ()

int A[50],B[50],a,b,t;

printf("请输入A的元素个数:\n");

scanf("%d",a);

printf("请输入A的元素:\n");

for(int i=0;ia;i++)

scanf("%d",A[i]);

printf("请输入B的元素个数:\n");

scanf("%d",b);

printf("请输入B的元素:\n");

for(int i=0;ib;i++)

scanf("%d",B[i]);

t=jiaoji(A,B,a,b);

for(int i=0;it;i++)

printf("%d ",A[i]);

return 0;

}

3条大神的评论

  • avatar
    访客 2023-01-08 上午 07:12:37

    int m, int n){ int flag; cout"两集合并集:"; for(int i = 0; i m; i++) { flag = true; for(int j = 0; j n; j++) { if(a[i]

  • avatar
    访客 2023-01-08 上午 03:41:52

    合的并、交和差运算的程序可以用二个一维数组,再用两个for循环来判断结果:交,并,差在for循环中,用一个if来判断一下,是不是a[0]==b[j],只要有相等的,就令之放在c[0] 这就是交集!!并集就好求吧

  • avatar
    访客 2023-01-08 上午 09:48:34

    tion){randValue=1+(int)rand()%10;for(j = 0;j = i;j++){if(i==0){//第一个数不可能存在重复数,可以直接赋值condition=0;break;}if(randValue==num[j])break;if(randVal

发表评论