要求:1,集合中的元素限定为英文字母和阿拉伯数字,集合中不允许出现重复元素
2,集合元素在输入时以“#”为结束标志。
3,用两个单链表A和B分别来表示两个集合。
取交集和并集:
如有帮助请在我的回答上点个【采纳】
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
int a[5],b[5],c[10],d[10],x,y,z;
printf("请输入5个A集合数据,空格隔开,回车结束\n:");
for(x=0;x<5;x++){
scanf("%d",&a[x]);
}
fflush(stdin);
printf("请输入5个B集合数据,空格隔开,回车结束\n:");
for(y=0;y<5;y++){
scanf("%d",&b[y]);
}
printf("集合A的元素有\n");
for(x=0;x<5;x++){
printf("%3d",a[x]);
}
printf("\n集合B的元素有\n");
for(y=0;y<5;y++){
printf("%3d",b[y]);
}
//并集
for(z=0;z<10;z++){
if(z<=4){
c[z]=a[z];
}else{
c[z]=b[z-5];
}
}
printf("\nA和B的并集:\n");
for(z=0;z<10;z++){
printf("%3d",c[z]);
}
//交集
z=0;
for(x=0;x<5;x++){
for(y=0;y<5;y++){
if(a[x]==b[y]){
d[z]=a[x];
z++;
break;
}
}
}
printf("\nA和B的交集:\n");
for(x=0;x<z;x++){
printf("%3d",d[x]);
}
}
可以尝试先排序在进行并和交操作。排序后,例如并操作:先遍历A,和B的第一个元素比较,如果小于B元素则把A的添加到并集,A链表向后移动,继续和B比较大小,并集放入小的,如果B元素小则放入B中的元素,B向后移动,继续操作,直到有一个链表遍历完毕,把另一个链表元素挨个放入并集。交操作:遍历A,A第一个元素和B第一个元素比较,如果比B小,则A指针后移继续比较,如果A中某个元素比B元素大,则向后移动B指针继续比较操作
英文字母为什么不行?
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632