数据结构和算法 顺序表表示集合的几种操作

记录顺序表表示集合的几种操作

1.求两个集合的交集


算法要求:交集运算,求L3=L1∩L2
算法思想:用两次循环,依次抽取L1中的元素,检查L2是否有与之相等的元素,若有则//插入L3中

void intersectList(list *L1,list *L2,list *L3){
   
	int i,j;
	for(i=0;i<L1->length;i++){
   
		for(j=0;j<L2->length;j++){
   
			if(L1->data[i]==L2->data[j]){
   	//若是L1和L2都含有的元素	 
				listInsert(L3,L3->length++,L1->data[i]);  //插入L3的最后
			}
		}
	}
}

算法分析:两次循环,插入L3的最后只需要进行一次操作,执行次数为|L1|×|L2|,所以
时间复杂度:O(|L1|×|L2|)

2.求两个集合的并集


算法要求:并集运算,求L3=L1∪L2
算法思想:循环取出L1中的元素,直接插入L3的最后,然后取出L2的元素,判断L1中//是否含有相等的元素,若存在则跳过,不含则插入L3最后

void unionList(list *L1,list *L2,list *L3){
   
	int i,L2_len=L2->length,L1_len=L1->length;
	elementType e;
	for(i=0;i<L1_len;i++){
   				//L1中的元素插入L3的最后
		listInsert(L3,i+1 ,L1->data[i]);
	} 
	for(i=1;i<=L2_len;i++){
   
		getElem(L2,i,&e);
		if(!locateElem(L1,e))			//L1和L2重复的元素不能插入L3中
			listInsert(L3,++L1_len,e);	//不重复的元素插入L3的最后
	}
}

算法分析:时间性能主要看第二次循环,locateElem(L1,e)需要遍历L1,执行次数为|L1|×|L2|,因此时间复杂度:O(|L1|×|L2|)

3.求差集


算法要求:求差集,L3=L1-L2
算法思想:依次抽取L1中的元素,检查L2中是否含有相同元素,若不在L2中则插入L3最后;相同地,依次抽取L2中的元素检查是否在L1中,若不在则插入L3的最后

void  differenceList(list *L1,list *L2,list *L3){
   
	int i=
  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值