利用线性表LA和LB分别表示两个集合A和B,通过对线性表的应用来将两个集合合并为一个新的集合
建立两个空表,将集合存入两个线性表中,在LA中查找LB中元素,如果不存在该元素则将元素插入线性表LA中,从而实现两个集合的合并。
/*author:sangy
time:2021-09-16
version:1.0
功能描述:利用线性表La和Lb分别表示两个集合A和B,现将两个集合合并为新的集合A
*/
#include<stdio.h>
#define MAXSIZE 100 /*线性表的最大长度*/
/*定义线性表*/
typedef struct List{
int elem[MAXSIZE]; /*定义数组域*/
int last; /*线性表数组中最后元素在数组elem[]中的位置*/
}SeqList;
/*创建空表*/
void InitList(SeqList *La,SeqList *Lb)
{
La->last=-1;
Lb->last=-1;
}
/*合并集合A和集合B*/
void unin(SeqList *La,SeqList Lb)
{
int i,j,La_len,Lb_len;
int e;
La_len=La->last;
Lb_len=Lb.last;
for(i=0;i<=Lb_len;i++)
{ e=Lb.elem[i];
j=0;
while(j<=La_len&&e!=La->elem[j]) j++; /*在La中查找e元素*/
if(j>La->last) /*La中不存在和e相同的元素,则插入之*/
if(La_len<MAXSIZE-1) /*存储空间足够*/
La->elem[++(La->last)]=e; /*插入到La的最后*/
}
}
/*建立主函数*/
void main()
{
int i,j;
SeqList La;
SeqList Lb;
InitList(&La,&Lb);
for(i=0;i<=10;i++){
La.elem[i]=1+i;
La.last+=1;
Lb.elem[i]=5+i;
Lb.last+=1;
}
unin(&La,Lb );
for(j=0;j<=La.last;j++){
printf("%d\n",La.elem[j]);
}
}