利用线性表实现两个集合的合并

为什么结果会是这个样子?

img


#include
#define MAXSIZE 1000
typedef int DataType;
typedef struct
{
DataType data[MAXSIZE];
int last;
}sqlist;
typedef sqlist *L;
void creat(sqlist *L);
void Delete(sqlist *L,int i);
void print(sqlist *L);
int lenght(sqlist L);
int loction(sqlist *L,DataType x);
int insert(sqlist *L,int i,DataType x);
int getelem(sqlist *L,int i,DataType e);
void Union(sqlist *LA,sqlist *LB);
sqlist la,lb;DataType x;
int main()
{
creat(&la); print(&la);
creat(&lb); print(&lb);
printf("\n");
Union(&la,&lb);
printf("\n");
return 0;
}
void Union(sqlist *LA,sqlist *LB)
{
int lb_len,la_len;
int i;
la_len=lenght(la);
lb_len=lenght(lb);
DataType e,equal;
for(i=1;i<=lb_len;i++){
equal=getelem(&lb,i,e);
if(!loction(&la,equal)){
insert(&la,++la_len,equal);
}
}
print(&la);
}

void creat(sqlist *L)
{
int i,j;
printf("\n n=");
scanf("%d",&(L->last));
for(i=1;i<=L->last;i++){
printf(" data=");
scanf("%d",&(L->data[i-1]));
}
}
void print(sqlist *L)
{
int i,j;
if(L->last==0)
printf("The List is empty!");
else{
for(i=1;i<=L->last;i++)
printf(" %d ",L->data[i-1]);
}
}
int lenght(sqlist L)
{
return (L.last);
}
int getelem(sqlist *L,int i,DataType e)
{
if(i<0||i>L->last){
printf("\n not exist!");
return (-1);}
else{
e=L->data[i-1];
return e;
}
}
int insert(sqlist *L,int i,DataType x)
{
int j;i--;
if(L->last==MAXSIZE){
printf("\n error!!\n");
return (-1);
}
if(i<0||i>L->last+1){
printf("\n error!!\n");
return (-1);}
else{
for(j=L->last-1;j>=i;j--)
L->data[j+1]=L->data[j];
L->data[i]=x;
L->last++;
return 1;
}
}
int loction(sqlist *L,DataType x)
{
int i=0;
while(i<=L->last-1&&L->data[i]!=x)
i++;
if(i>L->last-1) return -1;
else return i;
}
void Delete(sqlist *L,int i)
{
int j;i--;
if(i<0||i>L->last-1)
printf("\n not exist!");
else{
for(j=i;jlast-1;j++)
L->data[j]=L->data[j+1];
L->last--;
}
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^