一般线性表的合并
问题描述:假设利用两个线性表La和Lb分别表示两个集合A和B,现要求一个新的集合 A=A∪B。
La=(7, 5, 3, 11)
Lb=(2, 6, 3)
La=(7, 5, 3, 11, 2, 6)
算法步骤:
依次取出Lb中的每个元素,执行以下操作:
在La中查找该元素
如果找不到,则将其插入La的最后
合并线性表 代码如下
#include<iostream>
using namespace std;
#define MAX 100
typedef struct
{
int *elem;
int length;
}SqList;
//初始化
int InitSqList(SqList &L)
{
L.elem=new int[MAX];
if(!L.elem)
{
return 0;
}
else
{
L.length=0;
return 1;
}
}
int ListLength(SqList L)
{
return L.length;
}
//遍历
void TraveList(SqList &L)
{
for(int i=0;i<L.length;i++)
{
printf("%d ",L.elem[i]);
}
printf("\n");
}
void CreateList(SqList &L)
{
printf("请输入线性表的长度:");
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
int e;
scanf("%d",&e);
L.elem[i]=e;
L.length=i+1;
}
}
void Combine(SqList &A,SqList &B)
{
for(int i=0;i<B.length;i++){
int count=0;
for(int j=0;j<A.length;j++){
if(A.elem[j]=B.elem[i]){
count++;
}
}
if(count==0)
{
A.elem[A.length++]=B.elem[i];
}
}
}
int main()
{
SqList A, B;
if (InitSqList(A))
{
printf("线性表A初始化成功!\n");
}
else
{
printf("线性表A初始化失败!\n");
}
if (InitSqList(B))
{
printf("线性表B初始化成功!\n");
}
else
{
printf("线性表B初始化失败!\n");
}
CreateList(A);
printf("A表长度:%d\n", A.length);
TraveList(A);
CreateList(B);
printf("B表长度:%d\n", B.length);
TraveList(B);
printf("合并后的线性表:\n");
Combine(A, B);
printf("合并后表长度:%d\n", A.length);
TraveList(A);
system("pause");
return 0;
}