#include<stdio.h>
#include<malloc.h>
#define MAXNUM 100
typedef int ElemType;
typedef struct{
ElemType x[MAXNUM];
int length;
}number;
void InitList(number*&L)//创建一个空线性表
{
L = (number*)malloc(sizeof(number));
L->length = 0;
}
bool ListEmpty(number *L)
{
return (L->length == 0);
}//判断线性表是否为空
bool GetElem(number *L, int n, ElemType &e)//
{
if (n < 0 || n > L->length)
return false;
e = L->x[n - 1];
return true;
}
void DispList(number *L)//输出线性表
{
int i;
if (ListEmpty(L))
return;
for (i = 0; i < L->length; i++)
printf("%d ", L->x[i]);
printf("\n");
}
bool ListInsert(number*L, int i, ElemType e)//插入元素
{
int k;
if (i<0 || i>L->length + 1)
return false;
for (k = L->length; k >= i; k--)
L->x[k] = L->x[k - 1];
L->x[i - 1] = e;
L->length++;
return true;
}
int Listlength(number*L)//数组长度
{
return L->length;
}
void MergeList(number*L1, number*L2, number*&L3)//并集
{
InitList(L3);
int i = 1;
int j = 1;
int k = 0;
ElemType ai, bj;
int a = Listlength(L1);
int b = Listlength(L2);
while ((i <= a) && (j <= b))
{
GetElem(L1, i, ai);
GetElem(L2, j, bj);
if (ai < bj)
{
ListInsert(L3, ++k, ai);
++i;
}
if (ai == bj)
{
ListInsert(L3, ++k, ai);
++i;
++j;
}
if (ai > bj)
{
ListInsert(L3, ++k, bj);
++j;
}
}
while (i <= a){
GetElem(L1, i++, ai);
ListInsert(L3, ++k, ai);
}
while (j <= b){
GetElem(L2, j++, bj);
ListInsert(L3, ++k, bj);
}
}
int main()
{
number *L1;
number *L2;
number *L3;
printf("创建两个集合\n");
InitList(L1);
InitList(L2);
printf("集合L1:1 3 6 7 8\n");
ListInsert(L1, 1, 1);
ListInsert(L1, 2, 3);
ListInsert(L1, 3, 6);
ListInsert(L1, 4, 7);
ListInsert(L1, 5, 8);
printf("集合L2:2 3 5 7 8 9\n");
ListInsert(L2, 1, 2);
ListInsert(L2, 2, 3);
ListInsert(L2, 3, 5);
ListInsert(L2, 4, 7);
ListInsert(L2, 5, 8);
ListInsert(L2, 6, 9);
MergeList(L1, L2, L3);
printf("合集:");
DispList(L3);
}