离散数学:求集合的并、交、差、环和(c语言链表实现)

离散数学:求集合的并、交、差、环和(c语言链表实现)给定两个集合 A B 求其并 交 差 环和输入分为两行 第一行输入集合 A 第二行输入集合 B 其中各包括若干个素 每个素用 隔开 用 表示空集

题目描述:

        给定两个集合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语言链表实现)分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2025-01-06 20:46
下一篇 2025-01-06 20:40

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/103177.html