题目描述:
给定两个集合A,B,求其并、交、差、环和。
输入格式:
输入分为两行,第一行输入集合A,第二行输入集合B, 其中各包括若干个素,每个素用“,”隔开,用“{}”表示空集。素按照字典序排列。
输出格式:
输出分为4行,第一行输出A∪B的集合,第二行输出A∩B的集合,第三行输出A-B的集合,第四行输出A⊕B的集合。素按照字典序排列。
输入样例:
{a,b,c,d}
{c,d,e,f}
{c,d}
{a,b}
{a,b,e,f}
概念:
1.设A,B为集合,A与B的并集A∪B,交集A∩B,B对A的相对补集A-B分别定义如下:
A∪B={x|x∈A\/x∈B};
A∩B={x|x∈A/\x∈B};
A-B={x|x∈A/\x∉B}
2.设A,B为集合,则A与B的对称差是
A⊕B=(A-B)∪(B-A)
A与B的对称差还有一个等价的定义,即
A⊕B=(A∪B)-( A∩B)
思路:
首先定义一个结构体
#define MAXSIZE 100 typedef struct Collection{ char c; // 表示集合中的素 struct Collection *next; }*collection;
从输入的字符串中获得素,顺便返回素个数,获得只有素的数组
int createmember(char *x,char *y) { char *c=x; int num=0; while(*c) { if ((*c>='a'&&*c<='z')||(*c>='A'&&*c<='Z')||(*c>='0'&&*c<='9')) { *y=*c; y++; num++; } c++; } return num; }
题目上说输入时素按字典序排列,但也可以自己再排序,可有可无(选择排序)
void sort(char x[MAXSIZE],int len) { int min=0; for(int i=0;i<len;i++) { int start=i; min=start; while(start<len) { if (x[start]<x[min]) min=start; start++; } char c=x[i]; x[i]=x[min]; x[min]=c; } }
对集合链表进行初始化
今天的文章
离散数学:求集合的并、交、差、环和(c语言链表实现)分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/103177.html