计算0901-第11组-集合的并、交和差运算的程序

上传人:lisu****2020 文档编号:143176118 上传时间:2022-08-25 格式:DOC 页数:8 大小:76.51KB
收藏 版权申诉 举报 下载
计算0901-第11组-集合的并、交和差运算的程序_第1页
第1页 / 共8页
计算0901-第11组-集合的并、交和差运算的程序_第2页
第2页 / 共8页
计算0901-第11组-集合的并、交和差运算的程序_第3页
第3页 / 共8页
资源描述:

《计算0901-第11组-集合的并、交和差运算的程序》由会员分享,可在线阅读,更多相关《计算0901-第11组-集合的并、交和差运算的程序(8页珍藏版)》请在装配图网上搜索。

1、数据结构课程设计题目: 集合的并、交和差运算的程序组号: 第11组 成员: 任务:编制一个演示集合的并、交和差运算的程序。要求:集合的元素限定为整型数据;用三个子程序分别完成并、交和差运算,并输出结果。1、 需求分析首先对题目分析,编制集合的并、交和差运算的程序需理解集合的并、交和差运算:设A、B分别为实数域的两个集合,A=1,2,3,4,5,B=1,3,5,71) 集合的并运算集合的并运算是找出两个集合所能包含的最大元素个数的集合。即=1,2,3,4,5,72) 集合的交运算集合的并运算是找出两个集合所能包含的最大元素个数的集合。即=1, 3, 53) 集合的差运算集合的并运算是找出两个集合

2、所能包含的最大元素个数的集合。即=2,4其次,依据数据结构的知识以线性表的顺序表(存储数据类型和长度)为存储结构,数据元素类型为整型,创建两个顺序表La和Lb作为集合运算的主体,构建一个辅助顺序表Lc用来保存集合运算后的结果,最后,依据集合的并、交和差运算设计合理的函数体,分别实现顺序表的创建、初始化、输出元素、并运算、交运算和差运算。使用上述实例运行调试程序,并通过调用输出函数输出运算结果,查看是否准确无误的实现想要的运算结果。2、 概要设计定义数据结构为顺序表,含有两个数据域:整型元素、顺序表长度、空间大小。主函数中引用创建、初始化、并、交、差及输出顺序表的子函数。创建顺序表中,创建一个长

3、度为100的顺序表,由于分配的空间相对较大,没有使用追加空间的容错程序。使用交互操作实现对不同的顺序表选择是否立即创建元素。初始化顺序表元素中,使用循环语句依次从终端获取人工输入的元素值。输出顺序表元素中,使用循环语句依次输出元素,并适当控制元素间的间距便于辨认。集合并操作中,先将一个顺序表La的内容复制到用于暂存结果的顺序表Lc中,再依次对另一顺序表Lb的元素经行筛选:若元素存在于La中(标记blog=1)则跳过该元素,继续查看下一个元素,否则将该元素附加到暂存数组Lc的尾部。另外添加基本容错能力查看是否能够正确执行完该操作。集合交操作中,先将一个顺序表La的内容依次取出与Lb顺序表的元素一

4、一对比,若该元素存在于Lb中,则将该元素赋值到Lc顺序表的表尾(length位置),否则跳过该元素,继续查看下一个元素。另外添加基本容错能力查看是否能够正确执行完该操作。集合差操作中,设计程序差运算为Lc=La-Lb;先将一个顺序表La的内容依次取出与Lb顺序表的元素一一对比,若该元素不存在于Lb中(标记blog=0),则将该元素赋值到Lc顺序表的表尾(length位置),继续查看下一个元素,否则跳过该元素,另外添加基本容错能力查看是否能够正确执行完该操作。3、 详细设计#include #include #defineOVERFLOW-2#define OK 1#define ERROR 0

5、typedef int elemtype;typedef int Status;#define listintsize 100/定义数据结构typedef structelemtype*elem;intlength;intlistsize;Sqlist;/创建数组的元素Status listinsert(Sqlist *L,int i)elemtype a;printf(输入元素值:n);scanf(%d,&a);*(L-elem+i)=a;L-length+;return OK;/初始化数组Status initsqlist(Sqlist *L)int i,j,k;L-elem=(elemt

6、ype *)malloc(listintsize * sizeof(elemtype);if(!L-elem)return OVERFLOW;L-length=0;L-listsize=listintsize;printf(是否现在输入元素?n现在输入请按;n稍后输入请按;n);scanf(%d,&i);if(i=2)return OK;else if(i=1)printf(输入目标数组的元素个数j:nj=);scanf(%d,&j);for(k=0;kj;k+)listinsert(L,k);/创建元素return OK;elseprintf(操作指令错误!n);return ERROR;/

7、输出数组内容Status printlist(Sqlist *L)int i;for( i=0;ilength;i+)printf(%5d,*(L-elem+i);return OK;/blog=0表示元素只存在于一个数组中/blog=1表示元素同时存在于两个数组中/并操作Status Bing(Sqlist *La,Sqlist *Lb,Sqlist *Lc)int i,j;boolblog=0;for(i=0;ilength;i+)*(Lc-elem+i)=*(La-elem+i);Lc-length+;for(i=0;ilength;i+) for(j=0;jlength;j+)if(*

8、(Lb-elem+i)=*(La-elem+j)blog=1;break; if(blog=0) *(Lc-elem+(Lc-length)=*(Lb-elem+i);Lc-length+; blog=0;if(i=Lb-length)return OK;elsereturn ERROR;/交操作Status Jiao(Sqlist *La,Sqlist *Lb,Sqlist *Lc)inti,j;boolblog=0;for(i=0;ilength;i+) for(j=0;jlength;j+)if(*(La-elem+i)=*(Lb-elem+j)blog=1;break; if(blog

9、=1) *(Lc-elem+(Lc-length)=*(La-elem+i);Lc-length+; blog=0;if(i=La-length)return OK;elsereturn ERROR;/差操作 Lc=La-LbStatusCha(Sqlist *La,Sqlist *Lb,Sqlist *Lc)inti,j;boolblog=0;for(i=0;ilength;i+) for(j=0;jlength;j+)if(*(La-elem+i)=*(Lb-elem+j)blog=1;break; if(blog=0) *(Lc-elem+(Lc-length)=*(La-elem+i)

10、;Lc-length+; blog=0;if(i=La-length)return OK;elsereturn ERROR;/主函数int main()/初始定义个数组Sqlist list1,list2,list3;Sqlist *La,*Lb,*Lc;La=&list1;Lb=&list2;Lc=&list3;/创建两个顺序表printf(下面按操作创建两个数组:n-创建第一个数组La:-n);initsqlist(La);printf(n创建的第一个数组La内容为:);printlist(La);printf(n-创建第二个数组Lb:-n);initsqlist(Lb);printf(n

11、创建的第二个数组La内容为:);printlist(Lb);/实例运行集合的并操作printf(nnnnn-初始化预存数组Lc-请按跳过输入元素-n);initsqlist(Lc);Bing(La,Lb,Lc);printf(数组La与Lb执行集合并操作后结果为:);printlist(Lc);/实例运行集合的交操作printf(nnnnn-初始化预存数组Lc-请按跳过输入元素-n);initsqlist(Lc);Jiao(La,Lb,Lc);printf(数组La与Lb执行集合交操作后结果为:);printlist(Lc);/实例运行集合的差操作printf(nnnnn-初始化预存数组Lc-

12、请按跳过输入元素-n);initsqlist(Lc);Cha(La,Lb,Lc);printf(数组La与Lb执行集合差操作La-Lb结果为:);printlist(Lc);printf(n-nnnn);return 0;4、 调试分析按照操作提示语:1、按1 对创建的第一个顺序表La赋值,按5 设置La的长度为5 ,并依次输入5 个整型数据作为La的元素:1 ,2 ,3 ,4 ,52、按1 对创建的第二个顺序表Lb赋值,按4 设置La的长度为4 ,并依次输入4 个整型数据作为La的元素:1 ,3 ,5 ,7执行如上两步之后终端显示结果如下图:3、按2 跳过对用于保存运算结果的顺序表Lc的赋值

13、,主函数调用并操作子函数和输出元素函数给出运算结果。按2 跳过对用于保存运算结果的顺序表Lc的赋值,主函数调用交操作子函数和输出元素函数给出运算结果。按2 跳过对用于保存运算结果的顺序表Lc的赋值,主函数调用差操作子函数和输出元素函数给出运算结果。执行完上述操作终端显示如下图:该程序的三个字程序的时间复杂度均为关于程序时间复杂度可以一定程度的缩短如:在每次循环查找中删除相对没有用的元素(并操作中La与Lb中相同的元素,由于集合元素的互异性可以实现,其他操作可以类比).但相对而言并没有明显的缩短时间.程序中也没有按该想法实现另外程序中设置顺序表的空间大小为100,假如La和Lb长度足够,会出现并操作超过空间上限大小,实际运行时应当追加一个判断空间大小是否足够及追加空间的子函数,或设定用于保存运行结果的顺序表空间大小为La和Lb的长度的大小,即La.length+Lb.length.关于差操作中,只执行了La-Lb的操作,主函数可以再次调用差操作实现Lb-La的操作更为恰当,即添加语句(在return 0;语句之前)如下:initsqlist(Lc);Cha(La,Lb,Lc);printf(数组La与Lb执行集合差操作Lb-La结果为:);printlist(Lc);

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!