分析:依次从线性表LB中取出每个数据元素,并依次在线性表LA中查找该元素,如果LA中不存在该元素,则将该元素插入LA中。
<span style="font-size:18px;"># include<stdio.h>
# include<stdlib.h>
# define ListSize 100
typedef int DataType;
typedef struct
{
DataType list[ListSize];
int length;
}SeqList;
void InitList(SeqList *L)//初始化线性表
{
L->length=0;
}
int ListEmpty(SeqList L)//判断线性表是否为空
{
if(L.length==0)
return 1;
else
return 0;
}
int GetElem(SeqList L,int i,DataType *e)//按序号查找
{
if(i<1||i>L.length)
return -1;
*e=L.list[i-1];
return 1;
}
int LocateElem(SeqList L,DataType e)//按内容查找
{
int i;
for (i=0;i<L.length;i++)
if(L.list[i]==e)
return i+1;
return 0;
}
int InsertList(SeqList *L,int i,DataType e)//插入元素判断是否合法
{
int j;
if(i<1||i>L->length+1)
{
printf("插入位置不合法!\n");
return -1;
}
else if(L->length>=ListSize)
{
printf("顺序表已满,不能插入元素。\n");
return 0;
}
else{
for(j=L->length;j>=i;j--)
L->list[j]=L->list[j-1];
L->list[i-1]=e;
L->length=L->length+1;
return -1;
}
}
void UnionAB(SeqList *A,SeqList B);
int main()
{
int i,flag;
DataType e;
DataType a[]={2,3,17,20,9,31};
DataType b[]={8,31,5,17,22,9,48,67};
SeqList LA,LB;//声明顺序表LA和LB
InitList(&LA);//初始化LA
InitList(&LB);//初始化LB
for(i=0;i<sizeof(a)/sizeof(a[0]);i++)//将数组A中的元素插入到LA中
{
if(InsertList(&LA,i+1,a[i])==0)
{
printf("位置不合法");
return 0;
}
}
for(i=0;i<sizeof(b)/sizeof(b[0]);i++)//将数组A中的元素插入到LB中
{
if(InsertList(&LB,i+1,b[i])==0)
{
printf("位置不合法");
return 0;
}
}
printf("顺序表LA中的元素:\n");
for(i=1;i<=LA.length;i++)//输出顺序表LA中的每个元素
{
flag=GetElem(LA,i,&e);
if(flag==1)
printf("%4d",e);
}
printf("\n");
printf("顺序表LB中的元素:\n");
for(i=1;i<=LB.length;i++)//输出顺序表LB中的每个元素
{
flag=GetElem(LB,i,&e);
if(flag==1)
printf("%4d",e);
}
printf("\n");
printf("将LB中但不在LA中的元素插入到LA中:\n");
UnionAB(&LA,LB);
for(i=1;i<=LA.length;i++)
{
flag=GetElem(LA,i,&e);
if(flag==1)
printf("%4d",e);
}
printf("\n");
}
void UnionAB(SeqList *LA,SeqList LB)
{
int i,flag,pos;
DataType e;
for(i=1;i<=LB.length;i++)
{
flag=GetElem(LB,i,&e);
if(flag==1)
{
pos=LocateElem(*LA,e);
if(!pos)
InsertList(LA,LA->length+1,e);
}
}
}</span>