昨天我在数据结构中使用了线性表的顺序结构,以对集合的并集,交集,差和补码执行集合操作. 记录下来,希望对别人有帮助.
首先,算法分析
(1)使用数组A,B,C和E表示集合. 假设A = {1,3,4,5,6,7,9,10},
B = {2 ,, 3,4,7,8集合的交并差c语言,10}集合的交并差c语言,E = {1,2,3,4,5,6,7,7,9,10},
输入数组A,B和E(全套). 输入数据时,需要检查数据是否重复(要求集合中的数据不重复). 集合A和B必须是集合E的子集.
(2)两组的并集: 首先将数组A中的每个元素保存在数组C中. 将数组B中的元素与数组A中的元素一一比较,然后将不同的元素添加到数组C中. 数组C是集合A和集合B的并集.
C语言算法(线性表顺序结构的实现):
/**求集合的并集的函数**/
void Union_Sq(SqList La,SqList Lb,SqList &Lc){
int i;
ElemType elem;
Lc.length=0;
for(i = 0; i
Lc.elem[Lc.length++]=La.elem[i];
for(i = 1; i <= Lb.length; i++){
elem = Lb.elem[i-1];
if(!LocateElem_Sq(La,elem,Equal))
ListInsert_Sq(Lc,Lc.length+1,elem);
}
}
(3)两组的交集: 将数组A中的元素与数组B中的元素一一比较,然后将相同的元素放在数组C中,这是集合A与集合B的交集.
C语言算法(线性表顺序结构的实现):
/**求集合的交集的函数**/
void Mix_Sq(SqList La,SqList Lb,SqList &Lc){
int i;
ElemType elem;
Lc.length = 0;
for(i = 1; i <= La.length; i++){
elem = La.elem[i-1];
if(LocateElem_Sq(Lb,elem,Equal))
ListInsert_Sq(Lc,Lc.length+1,elem);
}
}
(4)两组的差运算: 将数组A中的元素与数组B中的元素一一比较,将数组A和数组B的不同元素保存在数组C中,并将数组C设置为A差AB设置为B.
C语言算法(线性表顺序结构的实现):
/**求集合的差集函数**/
void Differ_Sq(SqList La,SqList Lb,SqList &Lc){
int i;
ElemType elem;
Lc.length = 0;
for(i = 1; i <= La.length; i++){
elem = La.elem[i-1];
if(!LocateElem_Sq(Lb,elem,Equal))
ListInsert_Sq(Lc,Lc.length+1,elem);
}
}
(5)集合的互补运算: 将数组E中的元素与数组A中的元素一一比较,并保存数组C中的不同元素,数组C是关于集合E的集合A的补充.
补集是一种特殊的集差运算.
C语言算法(线性表顺序结构的实现):
/**求集合的补集函数**/
void Comple_Sq(SqList La,SqList Lb,SqList &Lc,SqList &Ld){
int i;
ElemType elem;
Ld.length = 0;
Union_Sq(La,Lb,Lc);
for(i = 1; i <= Lc.length; i++){
elem = Lc.elem[i-1];
if(!LocateElem_Sq(La,elem,Equal))
ListInsert_Sq(Ld,Ld.length+1,elem);
}
}
第二,实施效果图如下:
三,源程序如下:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-196491-1.html