#include<stdio.h>
#define MAXN 200
typedef struct{
int base[MAXN +1];
int length;
}SqList;
//按元素值查找LocateElem(L,e)
int LocateElem(SqList L,int e)
{
int i;
for(i=0;i<L.length && e!=L.base[i];i++);//for后面添加了一个冒号
//单独执行for内部的循环,此处一定要注意
if(i==L.length) return 0;//只有当长度是0的时候才成立
else return 1;
}
//插入函数
//这个函数在这里只是表示向*L的尾巴插入一个元素e
void InsertElem(SqList* L,int e)
{
L->base[L->length]=e;
(L->length)++;
return;
}
//打印线性表函数
void PrintList(SqList L)
{
//为空不输出
if(L.length ==0) return;
int i;
//输出除了最后一个元素带有换行外,其他元素后带有空格
for(i=0;i<L.length-1;i++)
printf("%d ",L.base[i]);
printf("%d\n",L.base[i]);
return;
}
//联合两个线性表
void Union(SqList *La,SqList *Lb)
{
int i;
for(i=0;i<Lb->length;i++)
{
if(!LocateElem(*La,Lb->base[i]))//每一个b里面的元素,在a里面查找
//如果查找结果,返回的是0,则采用下面的输出
{
InsertElem(La,Lb->base[i]);//把b元素插入到a的尾巴
}
PrintList(*La);
}
return;
}
int main()
{
int n,i;
SqList La,Lb;//线性表定义
while((scanf("%d",&n))!=EOF)
{
for(i=0,La.length=n;i<n;i++)
scanf(" %d",&La.base[i]);
scanf("%d",&n);
for(i=0,Lb.length=n;i<n;i++)
scanf(" %d",&Lb.base[i]);
PrintList(La);
PrintList(Lb);//打印出线性表a和b
if(La.length !=0 || Lb.length !=0)
Union(&La,&Lb);
printf("\n");
}
}
所有的解释都在代码注释当中,主要就是引用函数.