集合的操作(交并差)

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
简介: 集合的操作(交并差)

待改写:存储数据类型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)
{
    Linklist *p = LA->next,*q = LB->next;
 //此处双重while循环目的是将LA,LB中相同的元素打上标记,便于求他们的交并差集。
    while(p != NULL)
    {
        while(q!=NULL)
        {
            if(p->data == q->data)
            {
                p->flag = 1;
                q->flag = 1;
                q = q->next;
            }
            else
            {
                q = q->next;
            }
        }
        q = LB->next;
        p = p->next;
    }
}
int creatLinklinst(Linklist *L,int i)
{
    Linklist *p;
    L ->next = NULL;
    printf("依次输入元素各个值");
   for(;i>0;--i)
    {
        p  = (Linklist*)malloc(sizeof(Linklist));
        p->flag = 0;
        scanf("%d",&p->data);
        p->next = L->next;
        L->next = p;
    }
     return 1;
}
/*
* 交集
*输入:打标记后的LA/LB
*/
int intersection(Linklist *L)
{
    Linklist *node;
    Linklist *LC;
    LC = (Linklist *)malloc(sizeof(Linklist));
    LC->next = NULL;
    Linklist *p = L->next;
    while(p!=NULL)
{
  //处理LC的数据域(*****)
          for(;p!=NULL;p = p->next)
      {
          if(p->flag == 1)
          {
              node = (Linklist *)malloc(sizeof(Linklist));
              node->data = p->data;
              node->flag = 0;
              node->next = LC->next ;
              LC->next  = node;
          }
          else
          {
              continue;
          }
      }
      printf("交集是:");
      while(LC->next!=NULL)
      {
          LC = LC->next;
          printf("%d ",LC->data);
      }
      printf("\n");
      return 1;
}
}
/*
* 并集
*输入:打标记后的LA&LB
*/
int union_LALB(Linklist *LA,Linklist *LB)
{
    Linklist *p = LA,*q = LB;
    Linklist *LC;
    LC = (Linklist *)malloc(sizeof(Linklist));
    LC->next = NULL;
    Linklist *node;
    while(p->next!=NULL)
    {
        if(p->flag==1)
        {
            p = p->next;
            continue;
        }
        else
        {
            p = p->next;
            node = (Linklist *)malloc(sizeof(Linklist));
            node->flag = 0;
            node->data = p->data;
            node->next = LC->next;
            LC->next = node;
        }
    }
     while(q->next!=NULL)
    {
            q = q->next;
            node = (Linklist *)malloc(sizeof(Linklist));
            node->flag = 0;
            node->data = q->data;
            node->next = LC->next;
            LC->next = node;
    }
      printf("并集是:");
      while(LC->next!=NULL)
      {
          LC = LC->next;
          printf("%d ",LC->data);
      }
      printf("\n");
      return 1;
}
/*
* 差集
*输入:打标记后的LA&LB
*/
int disset(Linklist *LA,Linklist *LB)
{
    Linklist *p = LA,*q = LB;
    Linklist *LC;
    LC = (Linklist *)malloc(sizeof(Linklist));
    LC->next = NULL;
    Linklist *node;
    while(p->next!=NULL)
    {
        if(p->flag==1)
        {
            p = p->next;
            continue;
        }
        else
        {
            p = p->next;
            node = (Linklist *)malloc(sizeof(Linklist));
            node->flag = 0;
            node->data = p->data;
            node->next = LC->next;
            LC->next = node;
        }
    }
    printf("A-B的差集是:");
      while(LC->next!=NULL)
      {
          LC = LC->next;
          printf("%d ",LC->data);
      }
      printf("\n");
      return 1;
}
/*
* 输出打标记后的各个元素
*输入:打标记后的LA&LB
*/
int printfLinklist(Linklist *LA,Linklist *LB)
{
    Linklist *a,*b;
    a = LA;
    b = LB;
    printf("\nLA:");
    while(a->next!=NULL)
    {
        a = a->next;
        printf(" %d(%d)",a->data,a->flag);
    }
    printf("\nLB:");
    while(b->next!=NULL)
    {
        b = b->next;
        printf(" %d(%d)",b->data,b->flag);
    }
    printf("\n\n");
}
int main()
{
    Linklist *LA,*LB;
    int i;
    LA = (Linklist *)malloc(sizeof(Linklist));
    LB = (Linklist *)malloc(sizeof(Linklist));
//创建链表
    printf("输入LA长度:");
    scanf("%d",&i);
    creatLinklinst( LA,i);
    printf("输入LB长度:");
    scanf("%d",&i);
    creatLinklinst( LB,i);
//打标记
    Link_get_flag(LA,LB);
    printfLinklist(LA,LB);
//交集
    intersection(LA);
//并集
    union_LALB(LA,LB);
//差集
    disset(LA,LB);
    return 0;
}

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
前端开发 JavaScript
vue3使用pdfh5插件
vue3使用pdfh5插件
1182 0
|
存储 关系型数据库 MySQL
mysql安装教程mac
【4月更文挑战第21天】
669 1
|
负载均衡 网络协议 算法
slb监听协议与端口
SLB是云服务商提供的负载均衡服务,用于分发客户端请求到多台后端服务器,提升服务可用性和响应速度。关键概念包括监听协议(TCP、UDP、HTTP、HTTPS、TCPSSL)和监听端口。监听协议决定了SLB处理请求的方式,而监听端口则是SLB接收请求的入口。配置时需根据应用选择合适协议和端口,并可设置负载均衡算法(如轮询、最少连接等)。客户端应通过SLB统一入口访问后端服务,避免绕过SLB导致的问题。
1501 2
|
SQL 分布式计算 数据可视化
Apache Zeppelin系列教程第一篇——安装和使用
Apache Zeppelin系列教程第一篇——安装和使用
799 0
|
人工智能
Adobe Bridge2023全新永久版电脑文件管理工具
Adobe Bridge是一款由adobe出品的全新型电脑文件管理工具,是Adobe Creative Suite 的控制中心,从 Bridge 中您可以查看、搜索、排序、管理和处理图像文件,可以使用 Bridge 来创建新文件夹、对文件进行重命名、移动和删除操作、编辑元数据、旋转图像以及运行批处理命令,也可以查看有关从数码相机导入的文件和数据的信息。Adobe Bridge软件功能全面,支持编辑管理图片、PDF文件等,帮助用户更好管理本地的文件。
3005 0
|
7月前
|
人工智能 自然语言处理 JavaScript
宜搭上新,DeepSeek 插件来了!
钉钉宜搭近日上线了DeepSeek插件,无需编写复杂代码,普通用户也能轻松调用强大的AI大模型能力。安装后,平台新增「AI生成」组件,支持创意内容生成、JS代码编译、工作汇报等场景,大幅提升工作效率。快来体验这一高效智能的办公方式吧!
2604 9
|
10月前
|
弹性计算 搜索推荐 安全
如何编写有效的Prompt模板:提升大模型性能的关键
在大模型应用中,编写有效的Prompt至关重要。本文介绍了如何编写高质量的Prompt模板,包括明确任务定义、选择高质量示例、优化任务指示和调整示例顺序。详细探讨了百炼平台提供的三种主要Prompt模板(ICIO、CRISPE、RASCEF)及静态和动态样例库的创建与应用,帮助提升模型性能。
763 0
|
存储 安全 算法
【Linux | C++ 】基于环形队列的多生产者多消费者模型(Linux系统下C++ 代码模拟实现)
【Linux | C++ 】基于环形队列的多生产者多消费者模型(Linux系统下C++ 代码模拟实现)
271 0
|
数据可视化 Python
【Python】Python 仿真OFDM发射机、信道和接收机-实现多种调制方式
文章介绍了如何使用Python和Commpy工具包实现OFDM通信系统的仿真,包括发射机、信道和接收机的过程,并支持BPSK、QPSK、8PSK、16QAM、64QAM等多种调制方式,同时展示了导频插入、信道冲击响应、星座映射的可视化,并计算了系统的误比特率。
604 0
|
数据采集 存储 JavaScript
使用Python截取网页内容的综合指南
使用Python截取网页内容的综合指南
500 1