当前位置:首页 » 编程语言 » c语言求集合并集
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言求集合并集

发布时间: 2023-02-07 13:17:34

① 用c语言实现集合的并集

用两个数组表示集合元素
对于AUB=C
先把A的数据 复制到C里面
然后 遍历B数组,每个元素和A对比,如果存在 则略过,否则添加到C中。
等到的C
即为并集

② 用c语言给定两个整数集合 a,b. 分别编写函数求这两个集合的并集(剔除重复元

#include<iostream>
usingnamespacestd;
classMergeList
{
int*a;
intsize;
public:
MergeList(intsize,intinit)
{
this->size=size;
a=newint[size];
for(inti=0;i<size;i++)
{
a[i]=init;
}

}
MergeList()
{
}
MergeList(constMergeList&obj)
{
this->size=obj.size;
a=newint[size];
for(inti=0;i<size;i++)
a[i]=obj.a[i];
}
voidSetData(int&index,int&data)
{
a[index]=data;
}
int&GetSize(){returnsize;}
~MergeList()
{
delete[]a;
}
MergeList&operator=(constMergeList&obj)
{
this->size=obj.size;
a=newint[size];
for(inti=0;i<size;i++)
a[i]=obj.a[i];
return*this;
}
boolIs_Same(int&element);
MergeListAddList(constMergeList&obj);
voidShow()
{
for(inti=0;i<size;i++)
cout<<a[i]<<"";
cout<<endl;
}
};
boolMergeList::Is_Same(int&element)
{
for(inti=0;i<size;i++)
{
if(a[i]==element)
returntrue;
}
returnfalse;
}
MergeListMergeList::AddList(constMergeList&obj)
{

MergeListC;
intm=0,i=0;
C.size=size+obj.size;
C.a=newint[C.size];
if(size<obj.size||(size==obj.size))
{
for(i=0;i<size;i++)
{
C.a[i]=a[i];
}
}
else
{
for(i=0;i<obj.size;i++)
{
C.a[i]=obj.a[i];

}
}
for(intj=0;j<obj.size;j++)
{
if(!this->Is_Same(obj.a[j]))
{
C.a[i+m]=obj.a[j];
m++;
}
}
C.size=i+m;
returnC;
}
intmain()
{
intLengthA,LengthB;
cout<<"inputlengtha:";
cin>>LengthA;
cout<<"inputlengthb:";
cin>>LengthB;
MergeListA(LengthA,2),B(LengthB,2),C;
cout<<"inputA:"<<endl;
for(inti=0;i<A.GetSize();i++)
{
inta;
cin>>a;
A.SetData(i,a);
}
cout<<"inputB:"<<endl;
for(intj=0;j<B.GetSize();j++)
{
intb;
cin>>b;
B.SetData(j,b);
}
C=A.AddList(B);
cout<<"合并后:"<<endl;
C.Show();
}

③ c语言 给定两个集合A和B,求集合A和集合B的并集。

struct Link *Union(struct Link *head1, struct Link *head2)
{
struct Link *p1 = head1->next, *p2 = head2->next;
struct Link *head, *p, *q;
head = (struct Link *)malloc(sizeof(struct Link));
head->next = NULL;
p = head;
while ((p1 != NULL) && (p2 != NULL))
{
q = (struct Link*)malloc(sizeof(struct Link));
q->next = NULL;
if (p1->data == p2->data)
{
q->data = p1->data;
p1 = p1->next;
p2 = p2->next;
}
else if (p1->data < p2->data)
{
q->data = p1->data;
p1 = p1->next;
}
else
{
q->data = p2->data;
p2 = p2->next;
}
p->next = q;
p = q;
}
if(p1 != NULL){
while(p1 != NULL){
q = (struct* Link)malloc(sizeof(struct Link));
q->next = NULL;
q->data = p1->data;
p1 = p1->next;
p->next = q;
p = q;
}
}else if(p2 != NULL){
q = (struct* Link)malloc(sizeof(struct Link));
q->next = NULL;
q->data = p2->data;
p2 = p2->next;
p->next = q;
p = q;
}
return head;
}
//适用于p1,p2链表都没有重复data的情况

④ 应用c语言编程:求两个有序集合的并集

#include<stdio.h>
#include<stdlib.h>
#include<time.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;i<count;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;i<count;i++)
{
printf("%d\t",num[i]);
}
printf("\n");
}

⑤ 用C语言实现集合的并集

用两个数组表示集合元素
对于AUB=C
先把A的数据
复制到C里面
然后
遍历B数组,每个元素和A对比,如果存在
则略过,否则添加到C中。
等到的C
即为并集

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

通过你描述的问题,正确的交集代码如下:
void
bing(char
a[],char
b[],int
m,int
n)
{
char
d[400];
int
i=0,j=0,s=m;
for(i=0;i<m;i++)
d[i]=a[i];
for(i=0;i<n;i++){
for(j=0;j<m;j++)
{
if(b[i]==a[j])
break;
}
if(j==m)
d[s++]=b[i];
}
cout<<"集合并集是:";
for(i=0;i<s;i++)
cout<<d[i]<<"
";
}

⑦ C语言求两个字符集合的交集和并集

int i,count=0,ch1[256]={0},ch2[256]={0};char s1[20],s2[20];//统计字符串1的字符情况for(i=0;i<20&&s1[i]!='\0';i++)ch1(s1[i])++;//统计字符串2的字符情况for(i=0;i<20&&s2[i]!='\0';i++)ch2(s2[i])++;//交集for(i=0;i<256;i++)if(ch1[i]>0&&ch2[i]>0){ putchar(i);count++;}if(count==0)printf("NULL");putchar('\n');//并集count=0;for(i=0;i<256;i++)if(ch1[i]>0&||ch2[i]>0) { putchar(i);count++;}if(count==0)printf("NULL");putchar('\n');

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

#include<stdio.h>
#include<stdlib.h>
#include<time.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;i<count;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;i<count;i++)
{
printf("%d\t",num[i]);
}
printf("\n");
}

⑨ c语言求并集

C语言求两个顺序表的并集函数为:
void fun(int a[],int b[],int n,int m,int c[]){
int i=0,j=0,k=0;
for (k=0;k<n+m;k++){
if(i>=n||a[i]>b[j]) {c[k]=b[j];j++;continue;}
if(j>=m||a[i]<b[j]) {c[k]=a[i];i++;continue;}
}
}
void main(){
int a[10],b[10],c[20];
printf("input a");
for(i=0;i<10;i++)scanf("%d",a+i);
printf("input b");
for(i=0;i<10;i++)scanf("%d",b+i);
fun(a,b,10,10,c);
for(i=0;i<20;i++)printf("%d ",c[i]);
}

⑩ 用C语言求两个整数集合的并集.

有a、b 2个数组,把b中每个元素分别和a中每个元素比较,若无重复,则加入数组a。这样的话一个for语句,再加一个功能函数(也可以写在主函数中)就好。

#include <stdio.h>

#include <string.h>

int main(int argc, char* argv[])

{

char a[20],b[20];

int n,m,j,k;

printf ("请输入第一个集合内容 ");

scanf ("%s",a);

j=strlen(a);

printf ("请输入第二个集合内容 ");

scanf ("%s",b);

k=strlen(b);

char c[20]="",d[40]="";

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

printf(" %s ",c);

index=0;

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

{

for(m=0;m<index;m++)

if(d[m] == a[n])

flag=0;

d[index++]=b[n];

}

flag=1;

} printf ("集合的并集是:");

printf(" %s ",d);

return 0;

}

(10)c语言求集合并集扩展阅读:

集合中元素的数目称为集合的基数,集合A的基数记作card(A)。当其为有限大时,集合A称为有限集,反之则为无限集。一般的,把含有有限个元素的集合叫做有限集,含无限个元素的集合叫做无限集。

表示

假设有实数x < y:

①[x,y] :方括号表示包括边界,即表示x到y之间的数以及x和y;

②(x,y):小括号是不包括边界,即表示大于x、小于y的数。