数据结构——集合合并
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; }
相关文章推荐
- 数据结构 集合类的汇总
- 合并两个数据集合
- 数据结构 顺序表及合并
- 数据结构中La表的数据合并到Lb表中
- 数据结构中La表的数据合并到Lb表中
- 树结构表示下集合的合并与元素的查找
- 数据结构集合
- SequenceInputStream类的简单介绍。以及用该类合并集合文件数据的程序代码。
- 数据结构与算法之—链表(二) 有序单链表合并
- 数据结构——单链表的创建、逆置、插入、有序表的建立、有序单链表合并等基础操作!!
- SqlServer合并两张相同结构表的数据
- 数据结构算法2.2 链表的合并
- 【程序员面试宝典】数据结构基础二单链表循环链表的操作 建立|插入删除|打印|合并
- 数据结构之顺序表(集合的交并差)
- 数据结构之链表合并算法
- 数据结构问题---链表运算集合
- 集合类(数据结构图、集合图、集合之间的比较)
- 数据结构之链表合并算法
- 实战数据结构(3)_两个单链表间的合并操作
- Python学习笔记-数据结构之集合