【数据结构】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语言(图) 本次所讲的是常有的四种结构: 邻接矩阵 邻接表 十字链表 邻接多重表 邻接矩阵 概念 两个数组,一个表示顶点的信息,一个用来表示关联的关系. 如果是无 ...
随机推荐
- golang map实现原理
这篇文章主要讲 map 的赋值.删除.查询.扩容的具体执行过程,仍然是从底层的角度展开.结合源码,看完本文一定会彻底明白 map 底层原理. 我要说明的是,这里对 map 的基本用法涉及比较少,我相信 ...
- thrift的介绍及其使用
什么是thrift Thrift是Facebook于2007年开发的跨语言的rpc服框架,提供多语言的编译功能,并提供多种服务器工作模式:用户通过Thrift的IDL(接口定义语言)来描述接口函数及数 ...
- 数据治理中Oracle SQL和存储过程的数据血缘分析
数据治理中Oracle SQL和存储过程的数据血缘分析 数据治理中的一个重要基础工作是分析组织中数据的血缘关系.有了完整的数据血缘关系,我们可以用它进行数据溯源.表和字段变更的影响分析.数据合规性 ...
- Redis核心原理与实践--列表实现原理之ziplist
列表类型可以存储一组按插入顺序排序的字符串,它非常灵活,支持在两端插入.弹出数据,可以充当栈和队列的角色. > LPUSH fruit apple (integer) 1 > RPUSH ...
- activemq启动错误UnsupportedClassVers rg/apache/activemq/console/Main:Unsupported major.minor version52.0
ActiveMQ与java的JDK是有版本对应匹配的. 下面提供一个匹配图: MQ版本号 Build-Jdk 依赖JDKapache-activemq-5.0.0 1.5.0_12 1.5+apach ...
- go 1.14上怎么下载第三方包
终端 go env -w GO111MODULE=on GOPATH-->src/pkg/bin in src源码包中 某个包中 go mod init XXX(表示当前报的第三方依赖) 然 ...
- CodeForce-785B Anton and Classes(简单贪心)
Anton and Classes Anton likes to play chess. Also he likes to do programming. No wonder that he deci ...
- Vmware 15 安装 win7 虚拟机 (初学者操作与详解教程)
@ 目录 一.镜像下载 1.什么是镜像 2.常见的系统镜像文件格式 3.下载win7旗舰版镜像 二.VMware Workstation 下载 1.什么是虚拟机 2.VMware 主要功能 3.VMw ...
- 01-mysql必知必会
概述 主键:唯一区分表中每个行(不可重复,不允许null mysql:基于客户-服务器的数据库系统 使用mysql mysql是部署在主机上的,可以通过ssh建立mysql连接 # 显示数据库 sho ...
- 简单入门PHP中的多字节字符串操作
什么是多字节的字符串操作呢?其实不少的同学可能都已经使用过了,但我们还是要从最基础的问题说起. 一个字符占几个字节并不是我们表面上看到的那样.正常情况下,一个数字或英文以及英文符号都是占用一个字节的. ...