集合的并、交和差运算.doc

上传人:3d66 文档编号:918800 上传时间:2018-12-03 格式:DOC 页数:13 大小:290.54KB
返回 下载 相关 举报
集合的并、交和差运算.doc_第1页
第1页 / 共13页
集合的并、交和差运算.doc_第2页
第2页 / 共13页
集合的并、交和差运算.doc_第3页
第3页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《集合的并、交和差运算.doc》由会员分享,可在线阅读,更多相关《集合的并、交和差运算.doc(13页珍藏版)》请在三一文库上搜索。

1、实验报告题目:集合的并、交和差运算 班级: 班 姓名: 学号: 1. 需求分析设计一个程序,要求实现集合的并、交和差运算(1) 输入的形式为字符型或者整型,输入的范围:小写字母字符。输出的形式:字符型或者整型。(2) 程序所能达到的功能:实现集合的并、交和差运算(3) 测试数据:正确:set1=”magazine”,set2=”paper” set1set2=”aegimnprz”,set1set2=”ae”,set1-set2=”gimnz”。 错误:set1=”012oper4a6tion89”,set2=”error data” setset2=”adeinoprt”,set1set2=

2、”aeort”,set1-set2=”inp”。 2. 概要设计为实现上述程序功能,应以有序链表表示集合。为此,需要两个抽象数据类型:有序表和集合(1)有序表的抽象数据类型定义为:ADT OrderedList数据对象:D= ai丨aiCharSet,i=1,2,n=o数据关系:R1= 丨ai-1,aiD,ai-1ai,i=2,,n基本操作: InitList(&L) / 结构初始化 LocateElem(L, e, compare() / 查找ListInsert(&L, i, e) / 插入元素ListDelete(&L, i,&e) / 删除元素等。 (2) 集合的抽象数据类型定义为:

3、ADT Set 数据对象:D=ai丨ai为小写英文字母且互不相同,i=1,2,,n,0=n=26 数据关系:R1= 基本操作: CreatSet(&T,Str) /生成集合T DestroySet(&T ) /销毁集合T的结构。 等。 各程序模块之间用for循环和while语句来实现调用。 3. 调试分析:调试过程中遇到的一些问题是通过网络查询,咨询老师等来解决。通过这次实验,懂得了如何生成一个集合,并用有序链表的方式来实现。我觉得,让我们来做这些实验好像真的有点困难。1.本程序的模块划分比较合理,且尽可能的将指针的操作封装在结点和链表的两个模块中,致使集合模块的调试比较成功。2.将数据存入数

4、组再转入链表,可以忽略输入集合的长度,设计更加巧妙,便于用户使用。3.采用数据抽象的程序设计方法,将程序划分为两个次:元素结点、有序链表,使得设计思路清晰,实现时调试顺利,各模块具有较好的可重复性,确实得到了一次良好的程序设计训练。4. 用户使用说明本程序的运行环境为DOS操作系统,可执行文件为:集合的并交差运算.exe5. 测试结果6. 附录:#include #include using namespace std;#ifdef USE_INT#define MYTYPE int#else#define MYTYPE char#endifbool IsElementInList(list

5、aSet, MYTYPE iElement)/查看一个元素是否在集合中 list:iterator iter; for (iter = aSet.begin( ); iter != aSet.end( ); iter+) if (*iter = iElement) return true; return false;void Trim(list &aSet)/去除集合中的重复元素 list newSet; list:iterator iter; for (iter = aSet.begin( ); iter != aSet.end( ); iter+) if (!IsElementInList

6、(newSet, *iter) newSet.push_back(*iter); aSet = newSet;void func1(list set1, list set2)/并 list newSet = set1; list:iterator iter; for (iter = set2.begin( ); iter != set2.end( ); iter+) if (IsElementInList(newSet, *iter) continue; else newSet.push_back(*iter); Trim(newSet); newSet.sort( ); cout集合的并操作

7、结果是:endl; cout; for (iter = newSet.begin( ); iter != newSet.end( ); iter+) cout*iter ; coutendl;void func2(list set1, list set2)/交 list newSet; list:iterator iter; for (iter = set1.begin( ); iter != set1.end( ); iter+) if (IsElementInList(set2, *iter) newSet.push_back(*iter); else continue; Trim(new

8、Set); newSet.sort( ); cout集合的交操作结果是:endl; cout; for (iter = newSet.begin( ); iter != newSet.end( ); iter+) cout*iter ; coutendl;void func3(list set1, list set2)/差 list newSet; list:iterator iter; for (iter = set1.begin( ); iter != set1.end( ); iter+) if (IsElementInList(set2, *iter) continue; else n

9、ewSet.push_back(*iter); Trim(newSet); newSet.sort( ); cout集合的差操作结果是:endl; cout; for (iter = newSet.begin( ); iter != newSet.end( ); iter+) cout*iter ; coutendl;int main(void) cout输入集合1的元素,按0结束endl; list set1, set2; list:iterator iter; MYTYPE iIn = -1; #ifdef USE_INT while (0 != iIn)#else while (0 !=

10、 iIn)#endif ciniIn; set1.push_back(iIn); set1.pop_back( ); Trim(set1); set1.sort( ); cout输入的集合1是:endl; cout; for (iter = set1.begin( ); iter != set1.end( ); iter+) cout*iter ; coutendl; / cout输入集合2的元素,按0结束iIn; set2.push_back(iIn); set2.pop_back( ); Trim(set2); set2.sort( ); cout输入的集合2是:endl; cout; f

11、or (iter = set2.begin( ); iter != set2.end( ); iter+) cout*iter ; coutendl; /here: cout选择操作1并,2交,3差,0退出iIn; switch(iIn) #ifdef USE_INT case 1: func1(set1, set2); break; case 2: func2(set1, set2); break; case 3: func3(set1, set2); break; case 0: return 0; break;#else case 1: func1(set1, set2); break; case 2: func2(set1, set2); break; case 3: func3(set1, set2); break; case 0: return 0; break;#endif default: break; goto here;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1