集合的并交和差运算.docx
- 文档编号:7468066
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:8
- 大小:108.65KB
集合的并交和差运算.docx
《集合的并交和差运算.docx》由会员分享,可在线阅读,更多相关《集合的并交和差运算.docx(8页珍藏版)》请在冰豆网上搜索。
集合的并交和差运算
实验报告
题目:
集合的并、交和差运算班级:
班姓名:
学号:
1.需求分析
设计一个程序,要求实现集合的并、交和差运算
(1)输入的形式为字符型或者整型,输入的范围:
小写字母字符。
输出的形式:
字符型或者整型。
(2)程序所能达到的功能:
实现集合的并、交和差运算
(3)测试数据:
正确:
setl二”magazin6;set2二”pape”setlU
set2=”aegimnprz”,set1nset2=”ae”,set1-set2=gimnz”。
错误:
setl二”012oper4a6tion89',set2二”errordata”setU
set2=”adeinoprt”,set1nset2二”aeorf,set1-set2=”np”。
2•概要设计
为实现上述程序功能,应以有序链表表示集合。
为此,需要两个
抽象数据类型:
有序表和集合
(1)有序表的抽象数据类型定义为:
ADTOrderedList{
数据对象:
D={ai丨ai€CharSet,i=1,2,…,n>=o}
数据关系:
R1={ 基本操作: InitList(&L)//结构初始化 LocateElem(L,e,compare。 )//查找 ListInsert(&L,i,e)//插入元素 ListDelete(&L,i,&e)II删除元素 等。 (2)集合的抽象数据类型定义为: ADTSet{ 数据对象: D={aiIai为小写英文字母且互不相同,i=1,2,…, n,0<=n<=26} 数据关系: R1={} 基本操作: CreatSet(&T,Str)//生成集合T DestroySet(&T)//销毁集合T的结构。 等。 各程序模块之间用for循环和while语句来实现调用。 3.调试分析: 调试过程中遇到的一些问题是通过网络查询,咨询老师等来解决。 通过这次实验,懂得了如何生成一个集合,并用有序链表的方式来实现。 我觉得,让我们来做这些实验好像真的有点困难。 1.本程序的模块划分比较合理,且尽可能的将指针的操作封装在结点和链表的两个模块中,致使集合模块的调试比较成功。 2.将数据存入数组再转入链表,可以忽略输入集合的长度,设计更加巧妙,便于用户使用。 3.采用数据抽象的程序设计方法,将程序划分为两个次: 元素结点、有序链表,使得设计思路清晰,实现时调试顺利,各模块具有较好的可重复性,确实得到了一次良好的程序设计训练。 4.用户使用说明 本程序的运行环境为DOS操作系统,可执行文件为: 集合的并交差 运算.exe 5.测试结果 ]*C: \U5er5\Administrator\Debug\Cppl.exe' 半: 6.附录: #include #include usingnamespacestd; #ifdefUSE_INT #defineMYTYPEint #else #defineMYTYPEchar #endif boolIsElementInList(list { list : iteratoriter; for(iter=aSet.begin();iter! =aSet.end();iter++) { if(*iter==iElement) { returntrue;} } returnfalse; voidTrim(list list list : iteratoriter; for(iter=aSet.begin();iter! =aSet.end();iter++) { if(! IsElementInList(newSet,*iter)) { newSet.push_back(*iter); } } aSet=newSet; } voidfunc1(list list list : iteratoriter; for(iter=set2.begin();iter! =set2.end();iter++) if(IsElementInList(newSet,*iter)) { continue;} else { newSet.push_back(*iter); } } Trim(newSet); newSet.sort(); cout<<"集合的并操作结果是: "< cout<<"{"; for(iter=newSet.begin();iter! =newSet.end();iter++){cout<<*iter<<"";} cout<<"}"< } voidfunc2(list { list list : iteratoriter; for(iter=set1.begin();iter! =set1.end();iter++) { if(IsElementInList(set2,*iter)){newSet.push_back(*iter); } else { continue; } } Trim(newSet); newSet.sort(); cout<<"集合的交操作结果是: "< for(iter=newSet.begin();iter! =newSet.end();iter++){ cout<<*iter<<""; } cout<<"}"< voidfunc3(list list : iteratoriter; for(iter=set1.begin();iter! =set1.end();iter++) { if(IsElementInList(set2,*iter)) { continue; } else { newSet.push_back(*iter); } } Trim(newSet); newSet.sort(); cout<<"集合的差操作结果是: "< cout<<"{"; for(iter=newSet.begin();iter! =newSet.end();iter++){ cout<<*iter<<"";}cout<<"}"< intmain(void) { cout«"输入集合1的元素,按0结束"< list : iteratoriter; MYTYPEiIn=-1; #ifdefUSE_INT while(0! =iIn) #else while('0'! =iIn) #endif {cin>>iIn; set1.push_back(iIn); set1.pop_back(); Trim(set1); set1.sort(); cout«"输入的集合1是: "< cout<<"{"; for(iter=set1.begin();iter! =set1.end();iter++){ cout<<*iter<<""; } cout<<"}"< ////////////////////////////////////////////////////////////////////////// coutvv"输入集合2的元素,按0结束"< iIn=-1; #ifdefUSE_INTwhile(0! =iIn) #else while('0'! =iIn) #endif { cin>>iIn; set2.push_back(iIn); } set2.pop_back(); Trim(set2); set2.sort(); cout«"输入的集合2是: "< cout<<"{"; for(iter=set2.begin();iter! =set2.end();iter++) { cout<<*iter<<""; } cout<<"}"< //////////////////////////////////////////////////////////////////////////here: cout«"选择操作1并,2交,3差,0退出"< cin>>iIn; switch(iIn) #ifdefUSE_INT case1: func1(set1,set2);break; case2: func2(set1,set2);break; case3: func3(set1,set2);break; case0: return0; break; #else case'1': func1(set1,set2);break; case'2': func2(set1,set2);break; case'3': func3(set1,set2);break; case'0': return0; break; #endif default: break; } gotohere; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 集合 运算