0
点赞
收藏
分享

微信扫一扫

【以学促练】3.数据结构-集合union

假设利用两个线性表LA和LB分别表示两个集合A和B(即:线性表中的数据元素即为集合中的成员),现要求一个新的集合A=A∪B。这就要求对线性表做如下操作:扩大线性表LA,将存在于线性表LB中而不存在于线性表LA中的数据元素插入到线性表LA中去。只要从线性表LB中依次取得每个元素,并依值在线性表LA中进行查访,若不存在,则插入之。上述操作过程可用下列算法描述之。

【以学促练】3.数据结构-集合union_测试数据

图:将两个列表合并的算法(C/C++描述)

上图算法中,在第8行取得集合B中的元素,然后再在第10行插入到集合A中。你的任务是先输出集合A和集合B中的元素,每个集合在一行中输出。然后每次在将集合B中的元素取出插入到集合A尾部后输出集合A中的元素。当然你的代码可以和上面的代码不一样,只要有相同的输出即可。


输入格式

有多组测试数据,每组测试数据占两行。第一行是集合A,第一个整数m(0<m<=100)代表集合A起始有m个元素,后面有m个整数,代表A中的元素。第二行是集合B,第一个整数n(0<n<=100)代表集合B起始有n个元素,后面有n个整数,代表B中的元素。每行中整数之间用一个空格隔开。

输出格式

每组测试数据输出n+2行:前两行分别输出集合A、集合B中的数据,后面n行是每次从B中取出元素插入到A尾部后的集合A。每行整数之间用一个空格隔开,每组测试数据之间用一行空行隔开。


样例输入

5 1 5 2 6 3
3 1 7 9
1 3
2 2 7
4 2 5 1 4
4 1 2 4 5

样例输出

1 5 2 6 3
1 7 9
1 5 2 6 3
1 5 2 6 3 7
1 5 2 6 3 7 9

3
2 7
3 2
3 2 7

2 5 1 4
1 2 4 5
2 5 1 4
2 5 1 4
2 5 1 4
2 5 1 4

#include<stdio.h>
#include<malloc.h>
/*-----------------------------------------------------------*/
typedef struct Union_
{
int *elem;
int size;
int len;
}*Union,un;
/*-----------------------------------------------------------*/
void out_put(Union op);
void creat_un(Union l);
void combine(Union pa, Union pb);
/*-----------------------------------------------------------*/
int main()
{
un LA, LB;
while ((scanf("%d", &LA.size)) != EOF)
{
creat_un(&LA);
scanf("%d", &LB.size);
creat_un(&LB);
if (LA.size != 0 || LB.size != 0)
{
combine(&LA, &LB);
}
printf("\n");
}
return 0;
}
/*-----------------------------------------------------------*/
void out_put(Union op)
{
for (int i = 0; i < op->len - 1; i++)
{
printf("%d ", op->elem[i]);
}
printf("%d\n", op->elem[op->len - 1]);
}
/*-----------------------------------------------------------*/
void creat_un(Union l)
{
l->elem = (int*)malloc(l->size * sizeof(int));
l->len = 0;
for (int i = 0; i < l->size; i++)
{
scanf("%d", &l->elem[i]);
l->len++;
}
if (l->len != 0)
{
out_put(l);
}
}
/*-----------------------------------------------------------*/
void combine(Union pa, Union pb)
{
int i = 0;
int j = 0;
if ((pb->len+pa->len) > pa->size)
{
pa->elem = (int*)realloc(pa->elem,(pa->len + pb->len) * sizeof(int));
}
for (i = 0; i < pb->len; i++)
{
for (j = 0; j < pa->len; j++)
{
if (pb->elem[i] == pa->elem[j])
{
break;
}
}
if (j == pa->len)
{
pa->elem[pa->len++] = pb->elem[i];
}
out_put(pa);
}
}

举报

相关推荐

0 条评论