【数据结构】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语言(图) 本次所讲的是常有的四种结构: 邻接矩阵 邻接表 十字链表 邻接多重表 邻接矩阵 概念 两个数组,一个表示顶点的信息,一个用来表示关联的关系. 如果是无 ...
随机推荐
- 洛谷P1314 聪明的质监员 题解
题目 聪明的质监员 题解 这道题和之前Sabotage G的那道题类似,都是用二分答案求解(这道题还要简单一些,不需要用数学推导二分条件,只需简单判断一下即可). 同时为了降低复杂度,肯定不能用暴力求 ...
- Spring(二)——IOC
一.入门 1.案例 1 public class Student { 2 3 private String name; 4 5 public Student() { 6 System.out.prin ...
- Django——cookie保持登录
普通登录时,无法保持登录的状态,每一次请求时都需要重新登录. 而在登录时,生成cookie并保存在浏览器中,这样每次登录就会携带登录信息,就可以保持登录状态了. 操作cookie语法: # (1) 设 ...
- WEB漏洞——RCE
RCE(remote command/code execute)远程命令/代码执行漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统. RCE漏洞 应用程序有时需要调用一 ...
- 什么是内存屏障? Why Memory Barriers ?
要了解如何使用memory barrier,最好的方法是明白它为什么存在.CPU硬件设计为了提高指令的执行速度,增设了两个缓冲区(store buffer, invalidate que ...
- 【LeetCode】862. 和至少为 K 的最短子数组
862. 和至少为 K 的最短子数组 知识点:单调:队列:前缀和 题目描述 返回 A 的最短的非空连续子数组的长度,该子数组的和至少为 K . 如果没有和至少为 K 的非空子数组,返回 -1 . 示例 ...
- JavaScrip中 Array.reduce()
数组的方法 reduce() reduce方法在数组的每一项元素上都会执行回调函数. 语法:array.reduce( callBack [ , init] ) // 语法arrary.reduce ...
- CentOS8部署tftp
tftp:简单文本传输协议,而ftp:文本传输协议.可以把tftp看成是ftp的精简版.tftp用于免登录传输小文件,tftp服务端监听在udp协议的69端口tftp简单的工作原理: tftp服务端与 ...
- js设计模式之发布订阅模式
1. 定义 发布-订阅模式其实是一种对象间一对多的依赖关系,当一个对象的状态发送改变时,所有依赖于它的对象都将得到状态改变的通知. 订阅者(Subscriber)把自己想订阅的事件注册(Subscri ...
- 简单了解Phar代码打包工具的使用
简单了解Phar代码打包工具的使用 Phar 是在 PHP5 之后提供的一种类似于将代码打包的工具.本质上是想依照 Java 的 Jar 文件那种形式的代码包,不过本身由于 PHP 是不编译的,所以这 ...