原题链接:数据结构-集合union
解题思路:
①:输入两个集合LA,LB
②:求它们的并集
1):遍历LB中的所有元素,看是否存在于LA中
2):若存在则把该元素插入到LA的末尾,并输出LA,换行
3):若不存在,则也输出LA,换行
③:一组数据结束后,换行
注意事项:
1)根据上面求并集过程,LA的输出次数与LB的元素个数有关
即:LB中有n个元素,求并集过程时LA得输出n次,若n=0则不输出
2)题目要求输入集合后,要输出该集合,若集合长度为0,也不输出
3)每次输出占一行
4)每组数据输出完后,空一行
如:LA :1 1
LB:0
①先输出LA元素1换行;②LB没有元素,不输出;③又因为LB长度为0,所以之后的LA输出次数为0;④最后换行
LA:0
LB:0
①:首先,LA没有元素,不输出;②然后LB没有元素,不输出;③又因为LB长度为0,所以之后的LA输出次数为0;④最后换行
LA:0
LB:1 1
①首先,LA没有元素,不输出;②然后输出LB元素1换行;③LB长度为1输出一次LA换行,④最后换行

参考代码:
#include<stdio.h>
#include<malloc.h>
typedef struct Union_{
int *elem;
int length;
int size_;
}*Union,UNION;
void creat_union(Union L);
void combin_(Union LA,Union LB);
void out_put(Union L);
int main()
{
UNION LA,LB;
while(scanf("%d",&LA.size_)!=EOF)
{
creat_union(&LA);
/*输入LB的长度*/
scanf("%d",&LB.size_);
creat_union(&LB);
/*合并两个集合*/
if(LA.size_!=0||LB.size_!=0)
combin_(&LA,&LB);
/*每组数据输出后用一行隔开*/
printf("\n");
}
return 0;
}
/*------------------------------------------------*/
void creat_union(Union L)
{
L->elem=(int *)malloc(L->size_*sizeof(int));
L->length=0;
for(int i=0;i<L->size_;i++)
{scanf("%d",&L->elem[i]);L->length++;}
/*长度不是0时才输出*/
if(L->length!=0)
out_put(L);
}
/*------------------------------------------------*/
void combin_(Union LA,Union LB)
{
int j;
/*为了避免每次插入都要分配,导致分配次数过多,所以直接给LA->elem[],重分配空间大小为
LA->length+LB->length,但这种分配可能会造成空间浪费,还有一种方法是把要插入的元素个数求出来,再分配
但浪费时间*/
if(LA->length+LB->length>LA->size_)
LA->elem=(int *)realloc(LA->elem,(LA->length+LB->length)*sizeof(int));
for(int i=0;i<LB->length;i++)
{
/*判断LB中下标为i的元素在LA中是否存在*/
for(j=0;j<LA->length;j++)
{
if(LA->elem[j]==LB->elem[i])
break;
}
/*若果不存在则把LB->elem[i]插入到LA末尾,再插入之前,先重分配空间*/
if(j==LA->length)
{
LA->elem[LA->length++]=LB->elem[i];
}
out_put(LA);
}
}
/*------------------------------------------------*/
void out_put(Union L)
{ /*除最后一个元素外,其余元素输出后都有空格*/
for(int i=0;i<L->length-1;i++)
printf("%d ",L->elem[i]);
/*输出最后一个元素*/
printf("%d\n",L->elem[L->length-1]);
}别忘点赞哦-.-!
0.0分
15 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
typedef struct { int *elme; int length; int size; }Union, UNION; void creat(Union L); void combin(Union LA, Union LB); void output(Union L); void combin(Union LA, Union LB) { int j; if (LA.length + LB.length>LA.size) LA.elme = (int *)realloc(LA.elme, (LA.length + LB.length) * sizeof(int)); for (int i = 0; i < LB.length; i++) { for (j = 0; j < LA.length; j++) { if (LA.elme[i] == LB.elme[i]) break; } if (j == LA.length) { LA.elme[(LA.length)++] = LB.elme[i]; } output(LA); } } 为什么换了这样以未输出合并后的结果? creat与output函数都能正常运行。