#include<stdio.h>
#include<stdlib.h>
typedef struct {
    int *array;//线性表记录数据
    int length;
}List;
int isExist(List src, int tmp)
{
    int i = 0;
    while (i < src.length)
    {
        if (src.array[i] == tmp)
            break;
        i++;
    }
    if (i == src.length)
        return 0;    //不存在
    return 1;  //存在
}

List unionList(List src1, List src2)
{
    List des;
    int i;
    des.array = (int *)malloc(sizeof(int)*(src1.length + src2.length));
    des.length = 0;
    for (i = 0;i < src1.length;++i) //将src1中的数据加到输出集合中
    {
        if (!isExist(des, src1.array[i]))
        {
            des.array[des.length] = src1.array[i];
            des.length++;
        }
    }
    for (i = 0;i < src2.length;++i) //将src2中的数据加到输出集合中,没有写到一起,上下基本一样,方便记忆
    {
        if (!isExist(des, src2.array[i]))
        {
            des.array[des.length] = src2.array[i];
            des.length++;
        }
    }
    return des;//返回并集
}

List sectionList(List src1, List src2)
{
    List des;
    int i;
    int len = src1.length < src2.length ? src1.length : src2.length;  //去两个集合中较大的集合的个数,因为是交集
    //可以直接改成  int len = src1.length;  这样简单方便记忆
    des.array = (int *)malloc(sizeof(int)*(len));
    des.length = 0;
    for (i = 0;i < src2.length;i++) //将src1和src2的交集输出到des中,没有优化,可以根据大小,减少循环次数
    {
        if (isExist(src1, src2.array[i]) && !isExist(des, src2.array[i]))  //src2中的元素存在于src1中,但是不存在des中
        {
            des.array[des.length] = src2.array[i];    //符合条件加入des
            des.length++;
        }
    }
    return des;//返回并集
}
//上面函数中的src1,src2,des相当于  集合A,B,C  
//并集   C = A v B  ,C的最大长度   = A的长度 + B 的长度
//交集   C = A ^ B ,C的最大长度 = A 与 B 中较小的那一个
int main()
{
    
    List A,B;
    int i;   //i没有写到for循环中,怕老版本编译器不兼容
    int a[7] = { 1,2,6,7,8,9,10 };
    int b[6] = { 2,3,6,8,10,12 };
    A.array = a;
    A.length = 7;
    B.array = b;
    B.length = 6;
    List x = unionList(A, B);
    List y = sectionList(A, B);
    printf("A,B 并集:\n");
    for (i = 0;i < x.length;i++)
        printf("%d\t", x.array[i]);
    printf("\n\n\nA,B交集:\n");
    for (i = 0;i < y.length;i++)
        printf("%d\t", y.array[i]);
    printf("\n");

system("pause");
    return 0;
}

C 顺序表求交集和并集相关推荐

  1. python中交集并集用什么符号表示_Python实现两个list求交集,并集,差集的方法示例...

    本文实例讲述了Python实现两个list求交集,并集,差集的方法.分享给大家供大家参考,具体如下: 在python中,数组可以用list来表示.如果有两个数组,分别要求交集,并集与差集,怎么实现比较 ...

  2. Linux 两个文件求交集、并集、差集

    Linux 两个文件求交集.并集.差集 原文地址: Linux 两个文件求交集.并集.差集 (https://www.cnblogs.com/molong1208/p/5358509.html) 一. ...

  3. 用顺序表求集合的交集、并集和差集

    使用顺序表时, 需要定义一个数组来存储顺序表中的所有元素和定义一个整型变量来存储顺序表的长度.假定数组用data[MaxSize]表示,长度整型变量用length表示,并采用结构体类型表示,元素类型采 ...

  4. 对集合进行求交集、并集、差集

    对集合的元素进行计算操作 交集:求两集合相同元素 并集:求两集合全部元素(即用addAll()) 差集:求一个集合中剔除另一个集合所剩下的元素.(即用removeAll()) public class ...

  5. 【分享】Java集合求交集、并集、差集

    面试场景: 之前遇到一个长得很有趣的面试官问两个集合怎么求他们的交集.并集.茶集,回答之后觉得非常有意思,在这里记录一下: 概念说明 一.交集 交集:两个集合的公共(相交)部分,如下图: 代码案例: ...

  6. ES6 使用数据类型Set求交集、并集、差集

    前言 ES6新增了数据类型Set,它是一种类似数组的数据结构.但它和数组的不同之处在于它的成员都是唯一的,也就是说可以用来去除数组重复成员. Set本身是一个构造函数用来生成Set数据结构. cons ...

  7. C语言利用顺序表求两个集合的差集

    Description A和B分别表示两个集合,集合中的元素为整数,C=A和B的差集,计算并依次输出C中的元素. 要求:用顺序表存储,另辟空间保存C中元素 . Input 输入集合A的元素个数n(n& ...

  8. mysql数据库中两个表求交集_mysql怎么查两个表的交集

    mysql查询两个表的交集方法:1.将两个数据的数据列用UNION ALL关键字合并查询交集:2.使用带IN关键字的查询:3.使用带EXISTS关键字的子查询. mysql查询两个表的交集方法: 1. ...

  9. Java求交集、并集、差集

    public static void main(String[] args) {Set<Integer> set1 = new HashSet<>();Set<Integ ...

  10. 倒排索引优化 - 跳表求交集 空间换时间 贪心

    from:http://www.cnblogs.com/jcli/p/3984809.html 如果待合并的两个倒排表数据量很大, 但是交集很少时, 会是什么情况呢? 1 2 [1, 2, 3, 4, ...

最新文章

  1. Jmeter Aggregate Report 与 Summary Report 分析
  2. 清晰版 构建最高可用oracle数据库系统.pdf,构建最高可用Oracle数据库系统
  3. 组件Refs(操作DOM的2⃣️两种方法)
  4. 蓝桥杯基础模块1:LED跑马灯
  5. Cas单点登录配置数据查询用户
  6. 今日头条iOS客户端启动速度优化
  7. 心语收集13:有时候我真想忘了你,只记得这个世界,然而,我常常忘了整个世界,只记得你。...
  8. 谨慎设计方法签名(40)
  9. 如何在苹果Mac上的登录窗口中打开辅助功能?
  10. uniapp遮罩_APP新手引导遮罩层设计与UI视觉界面设计欣赏
  11. 个人总结-公司业务逻辑如何进行梳理?
  12. 渗透测试-中间件日志包含绕过和php文件读写包含
  13. Apache中间件漏洞深析
  14. 开源中国20份毕业设计论文致谢,谢辞,大学生的毕业论文致谢词,致谢词的范文...
  15. 图神经网络--图神经网络
  16. Python程序设计 实验5:字符串的应用
  17. mysql jpa List_jpa查询数据库返回list
  18. outlook服务器与本地文件,Outlook设置本地存储的方法
  19. 如何用Autojs写自己的卡密验证界面?实战代码
  20. AndroidVideoCache 原理

热门文章

  1. 2022-2028全球与中国工业蜂窝网关市场现状及未来发展趋势
  2. 如何使用Git上传本地项目到github?(mac版)
  3. 在嵌入式开发中如何提高自己的代码水平
  4. HDU 操作系统实验二 -设计一个系统调用,返回指定进程的相关时间信息
  5. 数据错误循环冗余检查是什么意思_将解耦功能集成到电源中,会发生什么?
  6. matlab用图像,Matlab常用图像操作
  7. 训练faster rcnn报错:KeyError:‘max_overlaps’
  8. 百度图片保存显示服务器错误,百度UEditor编辑器本地上传正常在服务器中上传图片失败的解决办法...
  9. 金蝶引出文件到服务器,金蝶迷你版如何引出帐套文件,具体操作流程
  10. 路由器开启WDS模式扩展WIFI覆盖范围