c语言顺序存储求并集,使用线性表的顺序结构来查找集合的并集,交集,差和补码(用C语言实现)...

pic1.gif

昨天我在数据结构中使用了线性表的顺序结构,以对集合的并集,交集,差和补码执行集合操作. 记录下来,希望对别人有帮助.

首先,算法分析

(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},

1-1033-jpg_6_0_______-631-0-0-631.jpg

输入数组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);

}

}

a9195366ab9976142660c04bab34e0ec.png

(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.

3d49fd431b2eaf361a8384933fc9a415.png

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的补充.

补集是一种特殊的集差运算.

3-810-jpg_6-1080-0-0-1080.jpg

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);

}

}

第二,实施效果图如下:

ebd3628d15ccb57b03125928fbab3a35.png

93fb34f70a8fde6eba9ad78d07d0ac49.png

三,源程序如下:

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-196491-1.html

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值