使用C语言,c语言两个线性表LA,LB,线性表La和线性表Lb合并,将LA中没有的元素插入到LA的前端

#include<stdlib.h>
#include<stdio.h>
#define MAXSIZE 100
#define ERROR 0
#define OVERFLOW 0
typedef int Status;
typedef struct { //定义顺序表
int *elem;
int length;
} List;

Status InitList(List &L) //创建空顺序表
{
L.elem = (int*)malloc(MAXSIZE*sizeof(int));
if(!L.elem)exit(OVERFLOW);
L.length = 0;
return 0;
}

void ListInput(List &L) //顺序表数据的输入
{
int i=0;
while (1){
scanf("%d",&L.elem[i]);
if(L.elem[i]==-1)break;
i++;
}
L.length=i;
}

int ListLength(List L) //求顺序表的长度
{
return L.length;
}

void GetElem(List L, int i, int &e) //求顺序表的第i个元素,并以e返回
{
e = L.elem[i - 1];
}

bool LocateElem(List L, int e) //判断List里有没有e这个元素
{
int i;
for (i = 0; i < L.length; i++)
if (e == L.elem[i])
return true;
return false;
}

void ListInsert(List &L, int e) //将e插入到List的最后
{
L.elem[L.length] = e;
L.length++;
}

void ListOutput(List L) //输出List
{
int i;
for (i = 0; i < L.length; i++)
printf("%d ",L.elem[i]);
printf("\n");
}

void unionList(List &LA, List LB) //线性表的合并(顺序表)
{
//将所有在线性表LB中但不在LA中的数据元素插入到LA中
int LA_len, LB_len, i, e;
LA_len = ListLength(LA);
LB_len = ListLength(LB); //求线性表的长度
for (i = 1; i <= LB_len; i++) {
GetElem(LB, i, e); //取LB中第i个数据元素赋给e
if (!LocateElem(LA, e)) //LA中不存在和e相同的数据元素,则插入之
ListInsert(LA, e);
}
} //unionList

int main() {
List LA, LB;
InitList(LA);//创建线性表LA
InitList(LB);//创建线性表LB
printf("请输入LA,以-1结束:") ;
ListInput(LA);//
printf("请输入LB,以-1结束:") ;
ListInput(LB);
unionList(LA, LB);
printf("LA和LB合并后的集合为:") ;
ListOutput(LA);
return 0;
}

根据上方代码修改,将LA中没有的元素插入到LA的前端(原代码是插入到LA的后端)
谢谢!

插入前端就需要将当前所有元素后移一位,然后将新元素放到第0位
增加一个前插函数

void ListInsertPrev(List &L, int e) //将e插入到List的最后
{
      for(int i=L.length;i>0;i--)
              L.elem[i] = L.elem[i-1];
      L.elem[0] = e;
      L.length++;
}

void unionList(List &LA, List LB) //线性表的合并(顺序表)
{
//将所有在线性表LB中但不在LA中的数据元素插入到LA中
int LA_len, LB_len, i, e;
LA_len = ListLength(LA);
LB_len = ListLength(LB); //求线性表的长度
for (i = 1; i <= LB_len; i++) {
GetElem(LB, i, e); //取LB中第i个数据元素赋给e
if (!LocateElem(LA, e)) //LA中不存在和e相同的数据元素,则插入之
ListInsertPrev(LA, e);
}
} //unionList

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