链表求交集、并集和差集

离散数学:求集合的并、交、差、环和(c语言链表实现) 给定两个集合A,B,求其并、交、差、环和 输入分为两行,第一行输入集合A,第二行输入集合B, 其中各包括若干个元素,每个元素用“,”隔开,用“{}”表示空集。元素按照字典序排列。 输出格式: 输出分为4行,第一行输出A∪B的集合,第二行输出A∩B的集合,第三行输出A-B的集合,第四行输出A⊕B的集合。元素按照字典序排列。 输入样例: {a,b,c,d} {c,d,... 阅读详情

链表求交集、并集和差集

C语言建立链表,输入集合A和集合B,求集合A和B的交集、并集和差集;
求交集写了两种,一种是求两个非递减集合的交集,另一种是无序集合

以下是打代码块

#include <stdio.h>
#include <stdlib.h>


int ans;
typedef struct Lnode{

    int data;
    struct Lnode *next;
}Lnode,*LinkList;



//链表初始化
LinkList InitList(LinkList L,int n){
    int data;
    L = (LinkList)malloc(sizeof(Lnode));
    //建立头结点
    L->next = NULL;
    //定义一个head指向L的头部
    LinkList head = L;

    for(int i = 0;i < n;i++){
        LinkList p = (LinkList)malloc(sizeof(Lnode));
        scanf("%d",&data);
        p->data = data;
        p->next = L->next;
        L->next = p;
        L=L->next;
    }

    return head;
}



//插入数据
LinkList InsertList(LinkList L,int i,int data){

    LinkList head = L;
    //标记插入的位置
    int mark = 1;
    while(L){
        if(mark == i){
            LinkList p = (LinkList)malloc(sizeof(Lnode));
            p->data = data;
            p->next = L->next;
            L->next = p;
            free(p);
            break;
        }
        mark++;
        L = L->next;
    }

    return head;
}

//求交集(有序)
LinkList Intersection(LinkList L1,LinkList L2){
    //存放交集C
    LinkList L3 = (LinkList)malloc(sizeof(Lnode));
    //初始化一下;
    L3->next = NULL;
    //标记C集合的头结点;
    LinkList head = L3;
    //用来替换L1,L2;
    LinkList p = L1->next,q= L2->next;
    //如果一个为空,跳出循环;
    while(p&&q){
            //如果相等,存入集合C
        if(p->data == q->data){
            LinkList tmp = (LinkList)malloc(sizeof(Lnode));
            tmp ->data = p->data;
            tmp->next = L3->next;
            L3->next = tmp;
            L3 = L3->next;
            p = p->next;
            q = q->next;
            continue;
        }
        //链表是递增顺序,如果集合A的数值小于集合B的数值,集合A往后移动一位,
        if(p->data > q->data){
            q = q->next;
        }
        //反之,移动集合B
        if(p->data < q->data){
            p = p->next;
        }
    }
    //返回标记的头;
    return head;
}
//查找数值
int Searchvalue(LinkList L,int data){
    LinkList head = L->next;
    while(head){
        if(head->data == data){
            return 1;
        }
        head = head->next;
    }
    return 0;

}
//删除链表的值
LinkList DeleteList(LinkList L,int data){
    LinkList head = L;
    while(L){
        if(L->next!=NULL&&L->next->data == data){
            L->next = L->next->next;
            break;
        }
        L = L->next;
    }
    return head;

}

//求交集(无序集合)
LinkList Intersection01(LinkList L1,LinkList L2){
    LinkList q = L1, p = L2;
    LinkList L = (LinkList)malloc(sizeof(Lnode));
    L ->next = NULL;
    LinkList head = L;
    while(q){
        if(Searchvalue(L2,q->data)){
            LinkList tmp = (LinkList)malloc(sizeof(Lnode));
            tmp ->data = q->data;
            tmp->next = L->next;
            L->next = tmp;
            L = L->next;
        }
        q = q->next;
    }
    return head;
}


//求差集(直接对L1进行操作)
void differentSet(LinkList L1,LinkList L2){
    //指向L1,L2
    LinkList p = L1->next,q = L2->next;
    //循环L2;
    while(q){
            //在L1中查找L2的值,如果相等,就在L1中删除该值
        if(Searchvalue(L1,q->data)){
            L1 = DeleteList(L1,q->data);
        }
        q = q->next;
    }
}
//求差集(零件一个链表储存)
LinkList differentSet01(LinkList L1,LinkList L2){
    //建立集合C储存差集
    LinkList L = (LinkList)malloc (sizeof(Lnode));
    L ->next = NULL;
    LinkList head = L;
    //替换L1,L2,防止两个链表被破坏
    LinkList p = L1->next,q = L2->next;
    //循环L2;
    while(p){
            //在L1中查找L2的值,如果相等,就在L1中删除该值
        if(!Searchvalue(L2,p->data)){
            LinkList tmp = (LinkList)malloc(sizeof(Lnode));
            tmp ->data = p->data;
            tmp->next = L->next;
            L->next = tmp;
            L = L->next;
        }
        p = p->next;
    }
    return head;
}

//求并集
LinkList Unionset(LinkList L1,LinkList L2){

    //替换L1,L2;
    LinkList p = L1->next,q = L2->next;
    //集合C存并集
    LinkList uni = (LinkList)malloc(sizeof(Lnode));
    uni->next = NULL;

    LinkList head_un = uni;

    ans = ans+1;
    while(p){
        LinkList tmp = (LinkList)malloc(sizeof(Lnode));
        tmp->data = p->data;
        tmp->next = uni->next;
        uni->next = tmp;
        p = p->next;
        uni = uni->next;
    }
    while(q){
        if(!Searchvalue(L1,q->data)){
            InsertList(head_un,ans,q->data);
            ans ++;
        }
        q = q->next;
    }
    return head_un;

}

//输出链表
void printList(LinkList L){

    LinkList head = L->next;
    while(head){
        printf("%d ",head->data);
        head=head->next;
    }
    printf("\n");
}


int main()
{
    LinkList L1,L2;

    int n;
    scanf("%d",&n);
    ans = n;
    L1 = InitList(L1,n);
    scanf("%d",&n);
    L2 = InitList(L2,n);
    printf("输出交集:");
    printList(Intersection01(L1,L2));//输出交集
    //differentSet(L1,L2);//求差集,不开空间存储
    //L1 = DeleteList(L1,5);//测试删除功能;
    LinkList L = differentSet01(L1,L2);//求差集
   printf("输出差集:");
    printList(L);//输出差集

   printf("输出并集:");
   //输出并集
   printList(Unionset(L1,L2));
    return 0;
}

从零到一:基于K375S主控的机械键盘优联无线化改造实战 本文详细记录了基于罗技K375S主控进行机械键盘优联无线化改造的全过程。从改造动机、核心原理与物料准备,到电路设计、PCB打样、焊接调试,逐步拆解了将优联技术集成到自定义机械键盘中的实战步骤。项目最终实现了低延迟、高稳定性且支持多设备连接的优联无线机械键盘,为DIY爱好者提供了高性价比的改造方案。 阅读详情

相关推荐

XILINX偶然加载不成功的问题原因及解决方法

本文为明德扬原创文章,转载请注明出处! 一、项目背景 明德扬(MDY)在2021年承担了多个基于XILINX芯片的研发项目,包括VPX网络透明传输项目(芯片为XC7K325T-2FBG900)、某高端测试仪项目(芯片为XCKU060-FFVA1156)、某网闸设备项目(芯片为XC7Z030-FBG676)等,另外,明德扬自研了基于XC7K325T-2FBG900和基于XC7K410T-2FBG900芯片的核心板,在XILINX研发领域拥有丰富的经验。即使拥有丰富经验和积累,每个新项目我们均...

6036

两个链表求交集

思路:釆用归并的思想,设置两个工作指针pa和pb,对两个链表进行归并扫描,只有同时出现在两集合中的元素才链接到结果表中且仅保留一个,其他的结点全部释放。当一个链表遍历完毕后,释放另一个表中剩下的全部结点。 LinkList Union(LinkList &la,LinkList &lb) { pa=la->next; //设工作指针分别为pa和pb pb=lb->next; pc=la; //结果表中当前合并结点的前驱指针 while(..

qq_48182858的博客 5386

Matlab2018a崩溃解决的办法No sandbox or build area path

Matlab 2018a (No sandbox or build area path)出现崩溃后需要使用terminal进行如下操作: cd /home/david/MySoft/MATLAB/R2018a/bin/glnxa64 (你的matlab路径) mkdir exclude mv libfreetype* exclude/ 执行后图片如下: 如果你用的Windows系统,请手动按照上面步骤剔除了dll。 Matlab 2018a (No sandbox or build are

David Xiao 1万+

链表简单实现集合交并

直接上代码: ​ #include<iostream> using namespace std; typedef struct Set { int data; struct Set* next; }*set; set CreateSet(int n) {//创建集合 set head = (set)malloc(sizeof(struct Set)); head->next = NULL; set p = head; for (int i = 0; i < n; i

沉在海里的鱼的博客 3339

SDM660电源部分配置:

SDM660电源部分配置: Panel power supplies 1、Reference power supplies Description Name Regulator Voltage (V) Panel power supply 0 vddio PMIC 660/L11 1.8 Panel power supply 1 Lab PMIC 660/lab 4.6 Panel power s...

weixin_41811215的博客 4729

模仿学习(Imitation Learning)概述

什么是模仿学习呢?简单来说,模仿学习(Imitation Learning),就是要训练机器能够复制人类的连续动作,进而达到模仿的目的。其实,Imitation Learning的实用性很高,假设今天有一个训练场景,你不知道该怎么定奖励值(reward),但是你可以收集到专家的示范数据(expert demonstration data),你就可以考虑用Imitation Learning这个方法。因此,模仿学习也被寄予很高的期待,成为下一代强人工智能的关键技术。......

qq_22749225的博客 2万+

有序链表集合求交集 方法 总结

- 二重for循环法,时间复杂度O(n*n) - 拉链法,时间复杂度O(n) - 水平分桶,多线程并行 - bitmap,大大提高运算并行度,时间复杂度O(n) - 跳表,时间复杂度为O(log(n))方案一:for * for,土办法,时间复杂度O(n*n)画外音:比较笨的方法。方案二:有序list求交集,拉链法有序集合1{1,3,5,7,8,9}有序集合2{2,3,4,5,6,7}两个指针指向首元素,比较元素的大小:(1)如果相同,放入结果集,随意移动一个指针;(2)否则,移动值较小的一个指针,直到队尾

软件工程小施同学 的专栏 2184

不只是抓取:用五指灵巧手(ROH-A001/RH56)玩转ROS2下的力控与混合控制

本文深入探讨了在ROS2环境下使用五指灵巧手(ROH-A001/RH56)实现力控与混合控制的实战技巧。从硬件通信协议解析到ROS2节点开发,详细介绍了力感知架构、实时数据处理和混合控制策略,帮助开发者在Ubuntu系统中高效实现精密操作。通过鸡蛋抓取等实例,展示了力控技术在机器人灵巧操作中的关键作用。

weixin_28221501的博客 287

单链表的插入

线性表的插入(链表基础)#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;typedef struct node{ int data; struct node *next;}LNode,*LinkList;void CreateLink(LinkList *L,int n){ *L=(LinkList)malloc(sizeof(L...

碳酸钙的01妖精的博客 443

【全网最新OD题库】2026华为 OD 机试C卷 机考真题库清单(全真题库)含考点说明(华为OD+2025年C卷+2025年B卷+2025年A卷+E卷+D卷+C卷)

华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2024e卷,od机试,2024E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2024华为od,如何备战华为od,华为od算法,华为od手撕代码,华为OD机试2024年最新题库,一文带你读懂华为OD,华为机试e卷,华为OD2025B卷、华

KJ.JK 3万+

【漏洞复现】Apache Tomcat远程代码执行漏洞(CVE-2024-56337)

CVE-2024-56337是一个存在于Apache Tomcat中的TOCTOU(Time-of-Check Time-of-Use)竞争条件漏洞。此漏洞源于对先前漏洞(CVE-2024-50379)的不完整修复。若默认servlet是可写的(参数readonly设置值为false,该设置为非默认设置)表示不区分大小写文件系统,在负载下并发读取和上传同一文件可以绕过Tomcat的大小写检查。攻击者可以通过构造恶意请求上传含恶意JSP代码的文件,使其触发解析并执行这些文件,从而导致远程代码执行。

李同學AI安全 3196

集合的交并差链式表示

#include #include typedef struct ListNode { int data; struct ListNode *next; }ListType; //创建 ListType *createlist(int n) { // int n; ListType *head,*s,*r; head=(ListType *)malloc(sizeof(ListType

xiaochaocnn的专栏 986

4、高光图像滤镜显著改善文本图像的光学字符识别

本文介绍了高光图像滤镜在光学字符识别(OCR)中的应用,详细探讨了其技术原理、实现步骤和在多种场景下的效果。通过增强文本图像的边缘和对比度,高光滤镜显著提升了OCR的识别率,尤其适用于扫描文档、手写笔记和低质量图像。实验结果表明,该方法在不同类型的文本图像中均表现出色,并提出了未来优化方向,如深度学习集成和多模态融合,为OCR技术的发展提供了新的可能性。

ooo22的博客 95

【数据结构】 链表表示集合并实现并集、交集、差集运算功能

总源代码在最后 双向链表: template<typename T> struct Node { T data; Node* next; Node* prior; }; 链表集合类 template<typename T> class ListSet { public: ListSet() ; ListSet(const ListSet<T>& Set); ~ListSet(); int getlength()const ;

RealCoder的博客 3640

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【C++数据结构——线性表】求集合的并、交和差运算(头歌实践教学平台习题)【合集】

对于两个集合A和B,集合A与集合B的差集是由所有属于A但不属于B的元素组成的集合,记作A-B。对于两个集合A和B,它们的交集是包含所有既属于A又属于B的元素所组成的集合,记作A∩B。对于两个集合A和B,它们的并集是包含所有属于A或者属于B的元素所组成的集合,记作A∪B。本关任务:编写一个程序求两个集合的并、交、差。集合的并集:abcdefhi。有序集合B:abdehi。有序集合A:acef。

Rossy Yan的博客 1027

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

单向链表

这闪电

骑着乌云看雪 148

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

代码题——链表

将带头结点的单链表A分解为两个单链表B和C,B 表中的结点为A表中小于 0 的结点,C 表中的结点为A表中大于 0 的结点。(由只在A中出现,不在B中出现的元素构成的集合),并存放于A链表中。与 “将两个递增的有序链表 A,B 合并为一个。A,B为两个递增有序的集合,采用链式存储。A,B为两个递增有序的集合,采用链式存储。A,B为两个递增有序的集合,采用链式存储。将带头结点的单链表“原地”逆置,即空间复杂度O(1)。删除递增有序链表中大于mink小于maxk的元素。,并存放于A链表中。,并存放于A链表中。

tytbw的博客 219

实验三

实验三:求两个集合(用单链表表示)的并、交和差运算 实验要求:在实验二的基础上,使用单链表表示集合,编写三个算法(求交算法、求并算法、集合求差),并输出最终的结果。 例如:集合A为(3、4、1、6),集合B为(2、3、6、7) 交集为:(3、6) 并集为:(1、2、3、4、6、7) 差集为:(1、4)(注意:差集C=A-B,即属于A但不属于B的元素的集合) #include<iostream> #include<cstdio> using namespace std; typede

sunhongxuan666的博客 224

集合的操作(交并差)

待改写:存储数据类型int——>char 重复的元素可存储 功能上不完善 #include <stdio.h> #include <stdlib.h> typedef struct { int data; int flag; struct Linklist *next; } Linklist; //对LA,LB中相同的元素打上标记 Linklist* Link_get_flag(Linklist *LA,Linklist *LB) { Li

qq_25218219的博客 252

线性表的应用实例(交并差)

整数集合用单链表实现存储,实现如下操作: (1) 初始化集合 (2)插入一个数到集合指定位置 (3)按值删除集合中的元素 (4)按值在集合中进行查找 (5)清空集合 (6)求两个集合的交集 (7)求两个集合的并集 (8)求两个集合的差集 (9)输出集合 #include<string.h> #include<stdio.h> #include<stdlib.h> typedef int ElemType; typedef struct Lnode { ElemType

frozen122的博客 690

算法不会,尚能饭否之集合(Set)

哎,这个年过的让我有点懒了。你懂得!程序员是不能懒的,所以还是逼着自己把这个集合的相关操作的程序写出来吧。我一直都告诉自己,程序不是想出来,是写出来的,程序不是在你的大脑里运行的,程序是在你的电脑上运行的,是吧,伙计! 如果,我想要一直的再懒下去,恐怕,链表我都不会实现了。呵呵!程序员需要的就是那种手摸键盘的感觉,你要是手不摸键盘就痒痒的,那你就该把手放到键盘上去磨磨了,至少,看完这个...

diaogan4202的博客 79

#面试--单链表常见面试题汇总

2.7.4.3.8.1 找出单链表中的倒数第k个元素,实现该方法 这是一道经典的笔试题,其实实现该方法十分简单。直接找倒数第k个元素似乎不太容易,要想找出倒数第k个元素,我们可以从第k个元素和倒数第k个元素的关系来获取倒数第k个元素。该关系如下所示。 从上图可以看出来,倒数第k个节点的索引 = size – (k+1)。所以方法实现如下: /** @functionName reverseGe...

流年梦里风起舞 839

算法与数据结构上机练习2

//设计一个程序,创建链表LA;LB,并用一个链表LC将两个链表链接起来,单调非递减. #include   #include   //定义节点结构体 typedef int elemtype;  typedef struct node  {    elemtype data;  struct node *next;  }JD;  //建立单链表函数 JD *creat()

u013637066的专栏 1083

4. Redis数据类型

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M.键值对集合,即编程语言中的Map类型。适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去)存储、读取、修改用户属性.链表(双向链表)。增删快,提供了操作某一段元素的API。 如:1,最新消息

林胖的专栏 306

数据结构与算法(educoder作业)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、栈二、使用步骤1.引入库栈——实验及提升训练 前言 数据结构与算法(C语言)头歌平台 一、栈 顺序表 关卡一 第1关 求顺序线性表中连续子表(最少有一个元素)的最大和 #include <stdio.h> #include <stdlib.h> /*此处是顺序线性表数据结构定义*/ typedef int DataType; struct seqList {//有3个数据成员 int MAX.

m0_51622088的博客 4604

求交集 并集 与差集 单链表实现

#include #include #include #define null 0#define M 100/*定义链表*/typedef int ElemType;typedef struct Lnode{    ElemType data;    struct Lnode *next;}Lnode,*LinkList;int lenth(LinkList *L)/*返回链表长度*/{   

1820
下一篇: LeetCode 最长回文子串
CHCY
博客等级 码龄5年 765粉丝 45原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CHCY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值