【数据结构】c语言实现集合的交并差运算
待改写:存储数据类型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;
}
【数据结构】c语言实现集合的交并差运算的更多相关文章
- 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明
<数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑 链接☛☛☛ <数据结构>课本源码合辑 习题集全解析 链接☛☛☛ ...
- 数据结构C语言版 有向图的十字链表存储表示和实现
/*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ...
- 数据结构C语言版 表插入排序 静态表
数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P270 编译 ...
- 数据结构C语言版 弗洛伊德算法实现
/* 数据结构C语言版 弗洛伊德算法 P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ...
- 数据结构(C语言)—排序
数据结构(C语言)—排序 排序 排序是按关键字的非递增或递减顺序对一组记录中心进行排序的操作.(将一组杂乱无章的数据按一定规律顺次排列起来.) 未定列表与不稳定列表 假设 Ki = Kj ( 1 ≤ ...
- 数据结构( Pyhon 语言描述 ) — — 第4章:数据和链表结构
数据结构是表示一个集合中包含的数据的一个对象 数组数据结构 数组是一个数据结构 支持按照位置对某一项的随机访问,且这种访问的时间是常数 在创建数组时,给定了用于存储数据的位置的一个数目,并且数组的长度 ...
- Python语言数据结构和语言结构(2)
目录 1. Python预备基础 2. Python数据类型 3. Python条件语句 4. while循环和for循环 1. Python预备基础 1.1 变量的命名 变量命名规则主要有以下几 ...
- c++学习书籍推荐《清华大学计算机系列教材:数据结构(C++语言版)(第3版)》下载
百度云及其他网盘下载地址:点我 编辑推荐 <清华大学计算机系列教材:数据结构(C++语言版)(第3版)>习题解析涵盖验证型.拓展型.反思型.实践型和研究型习题,总计290余道大题.525道 ...
- 图的存储结构大赏------数据结构C语言(图)
图的存储结构大赏------数据结构C语言(图) 本次所讲的是常有的四种结构: 邻接矩阵 邻接表 十字链表 邻接多重表 邻接矩阵 概念 两个数组,一个表示顶点的信息,一个用来表示关联的关系. 如果是无 ...
随机推荐
- RabbitMQ-初见
目录 什么是中间件 消息队列协议 AMQP协议 MQTT协议 OpenMessage协议 Kafka协议 消息队列持久化 消息的分发策略 消息队列高可用和高可靠 什么是高可用机制 集群模式1 - Ma ...
- openresty(nginx) 配置 http与https使用同一个端口,禁止 IP 直接访问
准备好工作目录 mkdir work cd work mkdir conf logs 准备好 conf/nginx.conf 配置文件, 把 your.domain 换成你自己的域名 user abc ...
- 记一次 .NET 某机械臂智能机器人控制系统MRS CPU爆高分析
一:背景 1. 讲故事 这是6月中旬一位朋友加wx求助dump的故事,他的程序 cpu爆高UI卡死,问如何解决,截图如下: 在拿到这个dump后,我发现这是一个关于机械臂的MRS程序,哈哈,在机械臂这 ...
- 1.深入TiDB:初见TiDB
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/584 本篇文章应该是我研究的 TiDB 的第一篇文章,主要是介绍整个 ...
- IO流实现GBK写入文件然后转换UTF-8
public static void main(String[] args) throws IOException { File file = new File("olol\\a.txt&q ...
- 聊一聊开闭原则(OCP).
目录 简述 最早提出(梅耶开闭原则) 重新定义(多态开闭原则) 深入探讨 OCP的两个特点 对外扩展开放(Open for extension) 对内修改关闭 抽象 关闭修改.对外扩展? 简述 在面向 ...
- 一文搞懂如何使用Node.js进行TCP网络通信
摘要: 网络是通信互联的基础,Node.js提供了net.http.dgram等模块,分别用来实现TCP.HTTP.UDP的通信,本文主要对使用Node.js的TCP通信部份进行实践记录. 本文分享自 ...
- HDFS基本命令
1.创建目录 hadoop dfs -mkdir /data hadoop dfs -mkdir -p /data/data1 创建多级目录 2.查看文件 hadoop dfs -ls / 3.上 ...
- Spring Boot中如何配置线程池拒绝策略,妥善处理好溢出的任务
通过之前三篇关于Spring Boot异步任务实现的博文,我们分别学会了用@Async创建异步任务.为异步任务配置线程池.使用多个线程池隔离不同的异步任务.今天这篇,我们继续对上面的知识进行完善和优化 ...
- java eclipse 使用随笔
1,无法import java.awt. 等各种文件,解决办法:(在module-info.java文件中加入requires java,desktop这句话)