集合的并、交、差运算

上传人:子 文档编号:45967993 上传时间:2018-06-20 格式:DOC 页数:15 大小:42KB
返回 下载 相关 举报
集合的并、交、差运算_第1页
第1页 / 共15页
集合的并、交、差运算_第2页
第2页 / 共15页
集合的并、交、差运算_第3页
第3页 / 共15页
集合的并、交、差运算_第4页
第4页 / 共15页
集合的并、交、差运算_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《集合的并、交、差运算》由会员分享,可在线阅读,更多相关《集合的并、交、差运算(15页珍藏版)》请在金锄头文库上搜索。

1、集合的并、交、差运算集合的并、交、差运算实验 二 集合的并、交和差运算/ 在写代码的过程中,没有注意头结点 导致出现了很多野指针 ,几乎重写. 。o 0 / 经同学检查,发现有错误 红色部分代码已经修正/集合的并、交和差运算/*选作内容(1)集合元素的判定和子集判定运算(2)求集合的补集(3)集合的混合式运算表达求值(4)集合的元素类型推广到其他类型,甚至任意类型*/*测试数据:(1)Set1 = “magazine“,Set2 = “paper“,Set1Set2 = “aegimnpra“,Set1Set2 = “ae“,Set1 - Set2 = “gimnz“(2)Set1 = 012

2、oper4a6tion89“,Set2 = “error date“,Set1Set2 = “adeinoprt“,Set1Set2 = “aeort“,Set1 - Set2 = “inp“*/#include#include#includeusing namespace std;#define ElemType chartypedef struct ElemNodeElemType elem;struct ElemNode *next;ElemNode, *Set;/-FunctionList-/-函数原型-int LengthOf(Set src);/返回一个集合的长度void Crea

3、teSet(Set dest);/创建一个新的字母集合,限定 a-zvoid EmptySet(Set dest);/清空一个集合,保留头结点void DestroySet(Set dest);/销毁集合void SortSet(Set dest);/对一个集合进行从小到大的排序void DisplaySet(Set src);/打印集合的所有元素int ExistElem(Set dest, ElemType e);/判断元素是否存在于集合中void DelElem(Set dest, ElemType e);/删除集合中的一个元素一次void AddElem(Set dest, ElemT

4、ype e);/在链表尾部追加一个元素void ContactSet(Set dest, Set src);/连接一个集合到另一个集合void AddSet(Set dest, Set src1, Set src2);/集合并运算void MulSet(Set dest, Set src1, Set src2);/集合交运算void SubSet(Set dest, Set src1, Set src2);/集合差运算int ExistSubset(Set dest, Set src);/子集判断void NegSet(Set dest, Set src);/求补集int main()Set

5、dest=(Set)malloc(sizeof(ElemNode);Set src1=(Set)malloc(sizeof(ElemNode);Set src2=(Set)malloc(sizeof(ElemNode);dest-next=NULL;cout集合并“集合交“集合差“错误!重输“进入下一步演示“item)if(item)switch(item)case 1: coutch;AddElem(dest, ch);DisplaySet(dest);coutch;DelElem(dest, ch);DisplaySet(dest);coutnext=NULL;NegSet(p, dest

6、);DisplaySet(p);coutnext!=NULL)i+;src=src-next;return i;/LengthOfvoid CreateSet(Set dest)/创建一个新的字母集合,限定 a-zElemType ch;Set p=dest,n;for(;)ch=getchar();if(ch=n) break;if(ch122) continue;n=(Set)malloc(sizeof(ElemNode);p-next=n;n-elem=ch;n-next=NULL;p=n;return ;/CreateSetvoid EmptySet(Set dest)/清空一个集合,

7、保留头结点Set p,n;while(dest-next!=NULL)p=dest;n=p-next;for(;n-next!=NULL;)p=n;n=n-next;free(n);p-next=NULL;/EmptySetvoid DestroySet(Set dest)/销毁集合EmptySet(dest);free(dest);/DestroySetvoid SortSet(Set dest)/对一个字母集合进行从小到大的排序int i,j,l,flag;Set p,q,n;l=LengthOf(dest);if(l0i-)flag=0;p=dest;q=p-next;n=q-next;

8、for(j=0;jelemn-elem)flag=1;p-next=n;q-next=n-next;n-next=q;q=p-next;n=q-next;p=q;q=n;n=n-next;/SortSetvoid DisplaySet(Set src)/打印集合的所有元素Set p;if(src-next=NULL)printf(“);return ;p=src;do p=p-next;putchar(p-elem); while(p-next!=NULL);/DisplaySetint ExistElem(Set dest, ElemType e)/判断元素是否存在于集合中Set p=des

9、t;if(LengthOf(p)=0)return 0;elsep=p-next;while(p-elem!=e)if(p-next=NULL)return 0;p=p-next;return 1;/ExistElemvoid DelElem(Set dest, ElemType e)/删除集合中的一个元素一次Set p=dest,q;if(LengthOf(p)=0)return ;q=p-next;if(LengthOf(p)=1)p-next=NULL;free(q);while(q-elem!=e)p=p-next;q=q-next;if(q-next=NULL)p-next=NULL

10、;free(q);elsep-next=q-next;/DelElemvoid AddElem(Set dest, ElemType e)/在链表尾部追加一个元素Set p=dest, n;while(p-next!=NULL)p=p-next;n=(Set)malloc(sizeof(ElemNode);p-next=n;n-elem=e;n-next=NULL;/AddElemvoid ContactSet(Set dest, Set src)/连接一个集合到另一个集合Set p=dest;while(p-next!=NULL)p=p-next;p-next=src-next;/Conta

11、ctSetvoid AddSet(Set dest, Set src1, Set src2)/集合并运算SortSet(src1);SortSet(src2);int i=0,j=0,len1=LengthOf(src1),len2=LengthOf(src2);src1=src1-next;src2=src2-next;while(ielemelem)i+;if(!ExistElem(dest, src1-elem)AddElem(dest, src1-elem);src1=src1-next;elsesrc1=src1-next;elsej+;if(!ExistElem(dest, src

12、2-elem)AddElem(dest, src2-elem);src2=src2-next;elsesrc2=src2-next;while(ielem)AddElem(dest, src1-elem); src1=src1-next;while(jelem)AddElem(dest, src2-elem);src2=src2-next;/AddSetvoid MulSet(Set dest, Set src1, Set src2)/集合交运算SortSet(src1);SortSet(src2);int i=0,j=0,len1=LengthOf(src1),len2=LengthOf(s

13、rc2);src1=src1-next;src2=src2-next;while(ielemelem) i+;src1=src1-next;else if(src1-elemsrc2-elem) j+;src2=src2-next;elsei+;j+;if(!ExistElem(dest, src1-elem)AddElem(dest, src1-elem);src1=src1-next;src2=src2-next;/MulSetvoid SubSet(Set dest, Set src1, Set src2)/集合差运算SortSet(src1);SortSet(src2);int i=0

14、,len=LengthOf(src1);src1=src1-next;while(ielem)if(!ExistElem(dest, src1-elem)AddElem(dest, src1-elem);src1=src1-next;elsesrc1=src1-next;/SubSetint ExistSubset(Set dest, Set src)/子集判断int i=0,len=LengthOf(src);src=src-next;while(ielem)return 0;i+;src=src-next;return 1;/ExistSubsetvoid NegSet(Set dest, Set src)/求补集SortSet(src);int i=0;while(i26)if(!ExistElem(src, i+97)AddElem(dest, i+97);i+;/NegSet

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号