输出错误,不晓得哪个函数出错了,验证过Union函数没有错误
#include<stdio.h>
#include<string.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20
typedef int Status;
typedef int ElemType;
typedef struct
{
ElemType data[MAXSIZE]; /*存储数组元素*/
int length; /*表当前有效长度*/
}SqList;/*数组存储类型名*/
int ListLength(SqList L);
Status GetElem(SqList L,int i,ElemType *e);
int LocateElem(SqList L,ElemType e,int compare(ElemType x,ElemType y));
int compare(ElemType x,ElemType y);
Status ListInsert(SqList *L,ElemType i,ElemType e);
Status ListEmpty(SqList L);
void Union(SqList *La,SqList Lb);
int main()
{
int i;
char ch;
SqList La,Lb;
La.length=0;
Lb.length=0;
for(i=0;;i++)
{
scanf("%d%c",&La.data[i],&ch);
La.length++;
if(ch=='\n')
break;
}
for(i=0;;i++)
{
scanf("%d%c",&Lb.data[i],&ch);
Lb.length++;
if(ch=='\n')
break;
}
if(!ListEmpty(La)&&!ListEmpty(Lb))
Union(&La,Lb);
for(i=0;i<La.length;i++)
printf("%d ",La.data[i]);
return 0;
}
/*返回L中数据元素个数*/
int ListLength(SqList L)
{
return L.length;
}
/*用e返回L中第i个数据元素的值*/
Status GetElem(SqList L,int i,ElemType *e)
{
if(L.length==0||i<1||i>L.length)
return ERROR;
*e=L.data[i-1];
return OK;
}
/*返回L中第1个与e满足关系compare()的数据元素的位序。若这样的数据元素不存在,则返回值为0*/
int LocateElem(SqList L,ElemType e,int compare(ElemType x,ElemType y))
{
int i;
for(i=0;i<L.length;i++)
{
if(compare(L.data[i],e))
return i+1;
}
return 0;
}
int compare(ElemType x,ElemType y)
{
if(x==y)
return 1;
else
return 0;
}
/*在L中第i个位置之前插入新的数据元素e,L的长度+1*/
Status ListInsert(SqList *L,ElemType i,ElemType e)
{
int k;
if(i==L->length)
L->data[i]=e;
else
{
for(k=L->length-1;k>=i-1;k--)
{
L->data[k+1]=L->data[k];
}
L->data[i-1]=e;
}
L->length++;
}
/*若L为空表,则返回TRUE,否则返回FALSE*/
Status ListEmpty(SqList L)
{
if(L.length==0)
return TRUE;
else
return FALSE;
}
/*将所有在表Lb中但不在表La中的数据元素插入到La中*/
void Union(SqList *La,SqList Lb)
{
ElemType e;
int La_len,Lb_len;
int i;
La_len=ListLength(*La); /*求La长度*/
Lb_len=ListLength(Lb); /*求Lb长度*/
for(i=1;i<=Lb_len;i++)
{
GetElem(Lb,i,&e);
if(!LocateElem(*La,i,compare)) /*若La中不存在和e相同的元素,则插入之*/
ListInsert(La,++La_len,e);
}
}