现有两个线性表LA和LA分别表示两个集合A和B,合并为一个新的集合A=A∪B.
完整代码如下:
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <malloc.h>
#include <iostream>
using namespace std;
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
#define MAX_SIZE 100
#define List int
typedef int Status;
typedef int ElemType;
typedef struct
{
ElemType *elem;
int length;
int listsize;
} SqList;
Status InitList_Sq(SqList &L)
{
L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
if ( !L.elem )
exit(OVERFLOW);
L.length = 0;
L.listsize = LIST_INIT_SIZE;
return OK;
}
int GetLength(SqList L)
{
return(L.length);
}
int GetElem(SqList L, int i, ElemType &e)
{
if (i < 1 || i > L.length)
return ERROR;
else
return (L.elem[i-1]);
}
int LocateElem(SqList L, ElemType e)
{
for (int i = 0; i < L.length; i++)
{
if (L.elem[i] == e)
return (i+1);
}
return ERROR;
}
int CreatList(SqList &L, int n)
{
if (n < 0 || n > LIST_INIT_SIZE)
return ERROR;
for (int i = 0; i<n; i++)
{
scanf("%d", &L.elem[i]);
L.length++;
}
return OK;
}
Status ListInsert_Sq(SqList &L , int i, ElemType e)
{
ElemType *newbase, *p, *q;
if (i < 1 || i > L.length+1)
return ERROR;
if (L.length >= L.listsize)
{
newbase = (ElemType *)realloc(L.elem, (L.listsize + LISTINCREMENT) * sizeof(ElemType));
if ( !newbase )
exit(OVERFLOW);
L.elem = newbase;
L.listsize += LISTINCREMENT;
}
q = &(L.elem[i-1]);
for (p = &L.elem[L.length-1]; p >= q; --p)
{
*(p+1) = *p;
}
*q = e;
++L.length;
return OK;
}
void PrintList(SqList L)
{
printf("当前顺序表所有元素:");
for (int i = 0; i<L.length; i++)
{
printf("%d ", L.elem[i]);
}
printf("\n");
}
void Create(SqList &L)
{
int n;
L.length = 0;
printf("请输入要创建的顺序表长度(>1):");
scanf("%d", &n);
printf("请输入%d个数(空格隔开): ", n);
if ( CreatList(L, n) )
{
printf("创建成功!\n");
PrintList(L);
}
else
printf("输入长度非法!\n");
}
void unionn(SqList &La, SqList Lb)
{
int La_len = GetLength(La);
int Lb_len = GetLength(Lb);
ElemType equal, e;
for (int i = 1; i <= Lb_len; i++)
{
equal = GetElem(Lb, i, e);
if ( !LocateElem(La, equal) )
{
ListInsert_Sq(La, ++La_len, equal);
}
}
}
int main()
{
SqList La;
InitList_Sq(La);
printf("请录入顺序表La的数据:\n");
Create(La);
printf("\n");
SqList Lb;
InitList_Sq(Lb);
printf("请录入顺序表Lb的数据:\n");
Create(Lb);
printf("\n");
unionn(La, Lb);
printf("输出合并后的顺序表La: \n");
PrintList(La);
printf("\n");
return 0;
}
运行结果