实验 二 集合的并、交和差运算C++
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二集合的并、交和差运算
// 在写代码的过程中,没有注意头结点~~~ 导致出现了很多野指针~~~ ,几乎重写. 。o 0 ~~~
// 经同学检查,发现有错误~~~ 红色部分代码已经修正
//集合的并、交和差运算
/*
选作内容
(1)集合元素的判定和子集判定运算
(2)求集合的补集
(3)集合的混合式运算表达求值
(4)集合的元素类型推广到其他类型,甚至任意类型
*/
/*
测试数据:
(1)Set1 ="magazine",Set2 ="paper",
Set1∪Set2 ="aegimnpra",Set1∩Set2 ="ae",Set1 - Set2 ="gimnz"
(2)Set1 =012oper4a6tion89",Set2 ="error date",
Set1∪Set2 ="adeinoprt",Set1∩Set2 ="aeort",Set1 - Set2 ="inp"
*/
#include
#include
#include
using namespace std;
#define Elem Type char
typedef struct ElemNode
{
Elem Type elem;
struct ElemNode *next;
}ElemNode, *Set;
//-------------FunctionList------------------------------
//---------------函数原型--------------------------------
int LengthOf(Set src);//返回一个集合的长度
void CreateSet(Set dest);//创建一个新的字母集合,限定a-z
void EmptySet(Set dest);//清空一个集合,保留头结点
void DestroySet(Set dest);//销毁集合
void SortSet(Set dest);//对一个集合进行从小到大的排序
void DisplaySet(Set src);//打印集合的所有元素
int ExistElem(Set dest, Elem Type e);//判断元素是否存在于集合中
void DelElem(Set dest, ElemType e);//删除集合中的一个元素一次
void AddElem(Set dest, Elem Type 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 m ain()
{
Set dest=(Set)m alloc(sizeof(ElemNode));
Set src1=(Set)m alloc(sizeof(ElemNode));
Set src2=(Set)m alloc(sizeof(ElemNode));
dest->next=NULL;
cout<<"输入两个集合:"< CreateSet(src1);CreateSet(src2); cout< cout<<"Set1 =";DisplaySet(src1); cout<<"\t"; cout<<"Set2 =";DisplaySet(src2); cout< int item; cout<<"1->集合并"<<" "<<"2->集合交"<<" "<<"3->集合差"<<" "<<"非零整数->错误!重输"<<" "<<"0->进入下一步演示"< while(cin>>item) { if(item) switch(item) { case 1: cout<<"集合并运算:Set1∪Set2 ="; AddSet(dest, src1, src2); DisplaySet(dest); Em ptySet(dest); cout< case 2: cout<<"集合交运算:Set1∩Set2 ="; MulSet(dest, src1, src2); DisplaySet(dest); Em ptySet(dest); cout< case 3: cout<<"集合差运算:Set1-Set2 ="; SubSet(dest, src1, src2); DisplaySet(dest); Em ptySet(dest); cout< default: cout<<"输入错误!重输!!!"< } else {cout<<"进入下一步演示..."< } getchar(); cout<<"输入一个集合:"< CreateSet(dest); cout<<"原集合为:"; DisplaySet(dest); cout< char ch; cout<<"在链表尾部添加一个元素ch ="; cin>>ch; AddElem(dest, ch); DisplaySet(dest); cout< cout<<"删除集合中的存在的某个元素ch ="; cin>>c h; DelElem(dest, ch); DisplaySet(dest);cout< cout<<"再创建一个集合src ="; Set src=(Set)malloc(sizeof(ElemNode)); getchar(); CreateSet(src); cout<<"将src集合链接到集合dest中..."< ContactSet(dest, src); cout<<"此时dest为:";