有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 ("请输入第一个集合内容\n")
scanf ("%s",a)
j=strlen(a)
printf ("请输入第二个集合内容\n")
scanf ("%s",b)
k=strlen(b)
char c[20]="",d[40]=""
for (n=0n<jn++)
printf("\n%s\n",c)
index=0
for (n=0n<jn++)
{
for(m=0m<indexm++)
if(d[m] == a[n])
flag=0
d[index++]=b[n]
}
flag=1
} printf ("集合的并集是:")
printf("\n%s\n",d)
return 0
}
扩展资料:
集合中元素的数目称为集合的基数,集合A的基数记作card(A)。当其为有限大时,集合A称为有限集,反之则为无限集。一般的,把含有有限个元素的集合叫做有限集,含无限个元素的集合叫做无限集。
假设有实数x <y:
①[x,y] :方括号表示包括边界,即表示x到y之间的数以及x和y;
②(x,y):小括号是不包括边界,即表示大于x、小于y的数。
参考资料来源:百度百科-集合
用两个数组表示集合元素对于AUB=C
先把A的数据 复制到C里面
然后 遍历B数组,每个元素和A对比,如果存在 则略过,否则添加到C中。
等到的C
即为并集
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的情况