A并B代码,最后一步求并集无法输出,求帮助!

#include<stdio.h>
#define maxsize 100
typedef int ElemType;
typedef struct
{
ElemType elem[maxsize];
int last;
}SeqList;
void InitList(SeqList *L,int n)
{
int i;
for(i=0;i<n;i++)
scanf("%d",&L->elem[i]);
L->last=n;
}
ElemType GetData(SeqList L,int i)
{
for(i=0;i<L.last;i++)
return L.elem[i-1];

}
int Length(SeqList L)
{
return L.last;
}
void Display(SeqList L)
{
for(int i=0;i<L.last;i++)
{
printf("%d ",L.elem[i]);
}
printf("\n");
}

int Locate(SeqList L,ElemType e)
{
int i;
while((i<=L.last)&&(L.elem[i]!=e))
i++;
if(i<=L.last)
return (i+1);
else
return(-1);
}

void InsertList(SeqList *l,int pos,ElemType e)
{
int i;
for(i=l->last;i>=pos;i--)
l->elem[i]=l->elem[i+1];
l->elem[pos]=e;
l->last++;

}

void Union(SeqList *La,SeqList Lb)
{
int i;
ElemType e;
int lenA=Length(*La);
int lenB=Length(Lb);
for(i=1;i<=lenB;i++)
{
e=GetData(Lb,i);
if(0==Locate(*La,e))
{
InsertList(La,lenA,e);
lenA++;
}
}
}

void main()
{
SeqList LA,LB;
InitList(&LA,3);
Display(LA);
InitList(&LB,4);
Display(LB);
Union(&LA,LB);
Display(LA);
}

img

代码中的错误挺多的,需要修改的地方在代码中都注释了,直接从代码中看吧。
修改后运行效果:

img

代码修改如下:

#include<stdio.h>
#define maxsize 100
typedef int ElemType;
typedef struct
{
    ElemType elem[maxsize];
    int last;
}SeqList;
void InitList(SeqList* L, int n)
{
    int i;
    for (i = 0; i < n; i++)
        scanf("%d", &L->elem[i]);
    L->last = n;
}
ElemType GetData(SeqList L, int i)
{
    //for (i = 0; i < L.last; i++)
    if (i <= L.last)//这里是if语句
        return L.elem[i - 1];
    else
        return -1;

}
int Length(SeqList L)
{
    return L.last;
}
void Display(SeqList L)
{
    for (int i = 0; i < L.last; i++)
    {
        printf("%d ", L.elem[i]);
    }
    printf("\n");
}

int Locate(SeqList L, ElemType e)
{
    int i=0;
    while (( i < L.last) && (L.elem[i] != e))
        i++;
    if (i < L.last) //这是<不是<=
        return (i + 1);
    else
        return(-1);
}

void InsertList(SeqList* l, int pos, ElemType e)
{
    int i;
    if (pos == l->last)
    {
        l->elem[pos] = e;
        l->last++;
    }
    else
    {
        for (i = l->last; i >= pos; i--)
            l->elem[i] = l->elem[i - 1]; //这里是i-1不是i+1
        l->elem[pos - 1] = e; //这里是pos-1,不是pos
        l->last++;
    }
    

}

void Union(SeqList* La, SeqList Lb)
{
    int i;
    ElemType e;
    int lenA = Length(*La);
    int lenB = Length(Lb);
    for (i = 1; i <= lenB; i++)
    {
        e = GetData(Lb, i);
        if (-1 == Locate(*La, e)) //这里是-1,不是0
        {
            InsertList(La, lenA, e);
            lenA++;
        }
    }
}

int main()
{
    SeqList LA, LB;
    InitList(&LA, 3);
    Display(LA);
    InitList(&LB, 4);
    Display(LB);
    Union(&LA, LB);
    Display(LA);
    return 0;
}

列表插入,插入位置数据都得后移,怎么会是l->elem[i]=l->elem[i+1];呢?
for(i=l->last;i>pos;i--)
l->elem[i]=l->elem[i-1];
l->elem[pos]=e;
l->last++;
==========
另外Locate函数也有问题啊
int Locate(SeqList L,ElemType e)
{
int i;
while((i<=L.last)&&(L.elem[i]!=e))
i++;
if(i<=L.last)
return (i+1);
else
return(-1);
}
i都没有初始化,就用来判断i<=last? 并且如果没找到元素,你返回的是-1,不是0,为什么在Union函数中是if(0==Locate(*La,e))呢?

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632