#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的后端)
谢谢!