#include <stdio.h>
#include <malloc.h>
#define LISTSIZE 20
typedef struct {
int * elem;
int length;
int ListSize;
}SqList;
int main() {
SqList L1,L2,L3,L4; //L3做交集 L4做并集
int i,j,a,b=0,k,q;
L1.elem = (int*)malloc(LISTSIZE * sizeof(int));
L1.ListSize = LISTSIZE;
printf("输入表L1的数据个数以及数据:\n");
scanf("%d",&L1.length);
if (L1.length > LISTSIZE) {
printf("输入的数据过多,请重新输入!\n");
return 0;
}
for (i = 0; i < L1.length; i++) {
scanf("%d",&L1.elem[i]);
}
printf("L1的数据是:\n");
for (i = 0; i < L1.length; i++) {
printf("%d.",L1.elem[i]);
}
printf("\n\n");
L2.elem = (int*)malloc(LISTSIZE * sizeof(int));
L2.ListSize = LISTSIZE;
printf("输入表L2的数据个数以及数据:\n");
scanf("%d", &L2.length);
if (L2.length > LISTSIZE) {
printf("输入的数据过多,请重新输入!\n");
return 0;
}
for (i = 0; i < L2.length; i++) {
scanf("%d", &L2.elem[i]);
}
printf("L2的数据是:\n");
for (i = 0; i < L2.length; i++) {
printf("%d.", L2.elem[i]);
}
if (L1.length > L2.length) { //将两表中较短的表的长度记录,方便一会儿做交集的时候,短的走完就不往下走了
a = L2.length;
}
else a = L1.length;
printf("\n\n");
L3.elem = (int*)malloc(LISTSIZE * sizeof(int));
L3.ListSize = LISTSIZE;
L3.length = a;
for (i = 0; i < a; i++) {
int n, m;
n = L1.elem[i];
for (j = 0; j < a;j++) {
m = L2.elem[j];
if (n == m) {
L3.elem[i] = n;
b++; //b代表L3的长度
}
}
}
printf("表L1与L2中共同的数据是:\n");
for (i = 0; i < b; i++) {
printf("%d.",L3.elem[i]);
}
printf("\n\n");
L4.elem = (int*)malloc(LISTSIZE * sizeof(int));
L4.ListSize = LISTSIZE;
L4.length = L1.length + L2.length; //先假定4的长度是1+2
for (i = 0; i < L1.length; i++) {
L4.elem[i] = L1.elem[i]; //先把表1的数据放入表4
}
k = 0;
for (i = 0; i < L1.length; i++) { //通过比较,把表2中表4没有的数据送入表4
for (j = 0; j < L2.length; j++) {
if (L1.elem[j] != L2.elem[i]) {
k++; //k做标志,满足条件代表一轮比完了
if (k == L2.length) {
L4.elem[L1.length + i] = L2.elem[i];
q = 1; //q是满足条件的个数
q++;
}
}
}
}
L4.length = L4.length - q;
printf("表L1与表L2的并集是:\n");
for (i = 0; i < L4.length; i++) {
printf("%d.", L4.elem[i]);
}
return 0;
}
测试数据
L1:3,8,5,11
L2:22,6,8,3,15,11,20
结果 不报错,但数据有误