第三周项目3——求集合并集

问题及代码:

  1. /*      
  2. Copyright (c)2016,烟台大学计算机与控制工程学院      
  3. All rights reserved.      
  4. 文件名称:ww.cpp      
  5. 作    者:武昊
  6. 完成日期:2016年9月18日      
  7. 版 本 号:v1.0         
  8. 问题描述:假设有两个集合 A 和 B 分别用两个线性表 LA 和 LB 表示,即线性表中的数据元素即为集合中的成员。设计算法,用函数unionList(List LA, List LB, List &LC )函数实现该算法,求一个新的集合C=A∪B,即将两个集合的并集放在线性表LC中。
  9. 输入描述:无     
  10. 程序输出:数据。   
  11. */   
  1. #include<stdio.h>    
  2. #include<malloc.h>  
  3. #define  MAXSize 50  
  4. typedef struct    
  5. {    
  6.     int data[MAXSize];          //存放顺序表中元素    
  7.     int length;             //存放顺序表的长度     
  8. }sqlist;                    //顺序表的类型定义    
  9. void creatlist(sqlist *&,int a[],int );    
  10. void DispList(sqlist *);    
  11. void unionlist(sqlist *,sqlist *,sqlist *&);    
  12.     
  13. int main()    
  14. {    
  15.     sqlist *sqa,*sqb,*sqc;    
  16.     int a[6]= {5,8,7,2,4,9};    
  17.     creatlist(sqa,a,6);    
  18.     printf("LA:");    
  19.     DispList(sqa);    
  20.     int  b[6]= {2,3,8,6,0};    
  21.     creatlist(sqb,b,6);    
  22.     printf("LB:");    
  23.     DispList(sqb);    
  24.     unionlist(sqa,sqb,sqc);    
  25.     printf("LC:");    
  26.     DispList(sqc);   
  27.     return 0;  
  28. }    
  29. void creatlist(sqlist *&l,int a[],int n)    
  30. {    
  31.     int i;    
  32.     l=(sqlist *)malloc(sizeof(sqlist));    
  33.     for(i=0;i<n;i++)    
  34.     {    
  35.         l->data[i]=a[i];    
  36.     }    
  37.     
  38.     l->length=n;    
  39. }    
  40. void DispList(sqlist *l)    
  41. {    
  42.     int i;    
  43.     for(i=0;i<l->length;i++)    
  44.     {    
  45.         printf("%d ",l->data[i]);    
  46.     }    
  47.     printf("\n");    
  48. }    
  49. void unionlist(sqlist *a,sqlist *b,sqlist *&c)    
  50. {    
  51.     c=(sqlist *)malloc(sizeof(sqlist));    
  52.     int i,j=0,k=0,l=0;    
  53.     c->length=0;    
  54.     for(i=0;i<a->length;i++)    
  55.     {    
  56.         c->data[i]=a->data[i];    
  57.         c->length++;    
  58.     }    
  59.     while(j<b->length)    
  60.     {    
  61.         while(b->data[j]!=a->data[k]&&k<b->length)    
  62.         {    
  63.             k++;    
  64.         }    
  65.         if(k==b->length)    
  66.         {    
  67.             c->data[i]=b->data[j];    
  68.             i++;    
  69.             c->length++;    
  70.         }    
  71.         k=0;    
  72.         j++;    
  73.     }    
  74. }    

运行结果:

学习心得:

   求集合并集是算法一部分,熟练掌握后有利于我们算法库的应用。


 


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值