您的位置:首页 > 理论基础 > 数据结构算法

数据结构——集合合并

2014-08-07 11:10 232 查看

数据结构-集合合并

时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte

描述:

假设利用两个线性表LA和LB分别表示两个集合A和B(即线性表中的数据元素即为集合中的成员),现要求一个新的集合A=A∪B。这就要求对线性表做如下操作:扩大线性表LA,将存在于线性表LB中而不存在于线性表LA中的数据元素插入到线性表LA中去。只要从线性表LB中依次取出每个数据元素,并依值在线性表LA中进行查询,若不存在,则插入。(即给定两个集合La和Lb,要求将集合La和Lb合并成一个,并把结果保存在La中,即实现A=A∪B)。

请用如下函数完成上述功能,线性表List的定义如下(强烈建议使用下面的定义和函数结构)

typedef struct List

{

Elemtype *elem;

int length;

int listsize;

};

void union(List &La,List Lb)

输入:
输入有多组测试数据,每组测试数据包括2行,第一行是集合A的内容,第二行是集合B的内容

输出:

用一行输出合并后的集合A

样例输入:
List A = (ACFGIKNPRTVXY)

List B = (FGJLNQSUVY)

List A = (FHIJMP)

List B = (IKNQRTWXY)

样例输出:
A = (ACFGIKNPRTVXYJLQSU)

A = (FHIJMPKNQRTWXY)

算法分析:
该题目为数据结构基础题,结合书上所学线性表基本操作即可解答。

代码实现:

#include < stdio.h >
#include < string.h >
#include < stdlib.h >
#include < iostream >
using namespace std;

#define maxsize 20  ///线性表可以达到的最大长度
#define mem 10

char s1[20],s2[20];
typedef char Elemtype;

typedef struct  ///线性表的存储结构
{
Elemtype *elem;   ///存储空间的基地址
int length;      ///线性表当前长度
int listsize;
}List;

int Initlist(List &L)  ///创建一个空的线性表
{
L.elem = (Elemtype *)malloc(maxsize*sizeof(Elemtype));  ///为线性表分配一个maxsize的数组空间
L.length = 0;
L.listsize = maxsize;
return 1;
}

int Createlist(List &L ,char p[])  ///将字符数组 p 的数据存入线性表(初始化线性表)
{
int len = strlen(p);
for(int i = 0; i < len; i++)
{
if(L.length >= L.listsize )  ///线性表当前长度超过线性表可以达到的最大长度,并为线性表增加mem的空间长度
{
L.elem = (Elemtype *)realloc(L.elem ,(L.listsize +mem)*sizeof(Elemtype));
if(!L.elem)
exit(-1);
L.listsize = L.listsize + mem;
}
if(p[i]!='(' && p[i]!=')')
L.elem [L.length ++]=p[i];
}
return 1;
}

int Union(List &La,List &Lb) ///合并两个线性表
{
int i,j;
for(i = 0;i < Lb.length; i++)
{
for(j = 0; j < La.length; j++)
if(Lb.elem[i] == La.elem[j]) ///去除集合相同元素
break;
if(j == La.length)
{
if(La.length >= La.listsize)
{
La.elem = (Elemtype *)realloc(La.elem,(La.listsize + mem)*sizeof(Elemtype));
if(!La.elem)
exit(-1);
La.listsize = La.listsize + mem;
}
La.elem[La.length++]=Lb.elem[i]; ///将B表中的元素存入A表中
}
}
return 1;
}

int main()
{
List La,Lb;
char p[10],c1,c2;
while(cin >> p >> c1 >> c2 >> s1)
{
cin >> p >> c1 >> c2 >> s2;
Initlist(La);
Createlist(La,s1);
Initlist(Lb);
Createlist(Lb,s2);
Union(La,Lb);
cout << "A = (";
for(int i = 0; i < La.length ; i++)
cout << La.elem [i];
cout << ")" << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: