设计一个算法求A和B两个集合的并集。
#include<stdio.h>
#include<malloc.h>
#define MAX 10
#define IN 10
typedef struct List{
int *data;
int len;
int size;
}List,*PList;
int Init(PList L){
L->data=(int *)malloc(sizeof(int)*MAX);
L->len=0;
L->size=MAX;
return 1;
}
int Create(PList L,int n){
int i;
for(i=0;i<n;i++){
scanf("%d",&L->data[i]);
L->len++;
}
return 1;
}
int Print(PList L){
int i;
for(i=0;i<L->len;i++){
printf("%d ",L->data[i]);
}
printf("\n");
return 1;
}
int Connect(PList L1,PList L2,PList L3){
int i=0,j=0,k=0;
if(L3->size<=L1->len+L2->len){
L3->data=(int *)realloc(L3->data,(L3->size+IN)*sizeof(int));
L3->size+=IN;
}
while(i<L1->len&&j<L2->len){
if(L1->data[i]==L2->data[j]){
j++;
}
if(L1->data[i]<L2->data[j]){
L3->data[k++]=L1->data[i++];
}else{
L3->data[k++]=L2->data[j++];
}
}
while(i<L1->len){
L3->data[k++]=L1->data[i++];
}
while(j<L2->len){
L3->data[k++]=L2->data[j++];
}
L3->len=k;
return 1;
}
int main(){
List L1,L2,L3;
int m,n;
Init(&L1);
Init(&L2);
Init(&L3);
scanf("%d %d",&m,&n);
Create(&L1,m);
Create(&L2,n);
Connect(&L1,&L2,&L3);
Print(&L3);
return 0;
}
结果样例