实验 二 集合的并、交和差运算C++

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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为:";

相关文档
最新文档