集合运算器报告(共10篇)

上传人:bin****86 文档编号:60384700 上传时间:2018-11-15 格式:DOCX 页数:28 大小:26.11KB
返回 下载 相关 举报
集合运算器报告(共10篇)_第1页
第1页 / 共28页
集合运算器报告(共10篇)_第2页
第2页 / 共28页
集合运算器报告(共10篇)_第3页
第3页 / 共28页
集合运算器报告(共10篇)_第4页
第4页 / 共28页
集合运算器报告(共10篇)_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《集合运算器报告(共10篇)》由会员分享,可在线阅读,更多相关《集合运算器报告(共10篇)(28页珍藏版)》请在金锄头文库上搜索。

1、为了适应公司新战略的发展,保障停车场安保新项目的正常、顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划集合运算器报告(共10篇)西安邮电大学课内实验报告课程名称:数据结构与算法专业名称:班级:学生姓名:张妍学号加深对C语言的理解与掌握,对于给定的题目要求会运用所学基础知识如函数调用、值传递、指针等,设计合理有效的算法来进行处理。进一步提高解决问题的能力二.实验内容此程序主要实现集合的并、交、差的运算。首先用结构体定义集合元素为char类型,利用指针将输入的元素存到集合A和集合B中,然后在main()函数中使用了mixlist(),megrelist(),difference()构成菜

2、单供用户选择,通过值传递传给各函数,从而A、B集合在各函数中进行运算,并把所得元素放入C集合。三.实验方案设计1.功能模块图主菜单doprintf(1.集合的交运算n);printf(2.集合的并运算n);printf(3.集合的A对B的差运算n);printf(4.集合的B对A的差运算n);scanf(%d,&choice);switch(choice)case1:mixlist(linklist1,linklist2,linklist3);break;case2:megrelist(linklist1,linklist2,linklist3);break;case3:difference(

3、linklist1,linklist2,linklist3);break;case0:break;printf(请选择(0-4):);case4:difference(linklist2,linklist1,linklist3);break;while(choice!=0);return0;1、先写出用户可执行的功能,并用用数字代替功能,用switch()选择结构让用户进行选择,其中,0代表退出系统。2、选择后,函数会马上执行功能,运行完后按返回键会返回主菜单。3、用do-while循环,只要用户选择的不是0,循环会一直进行,即一直返回主菜单。并运算voidmegrelist(LNODEhea

4、d1,LNODEhead2,LNODEhead3)LNODE*q,*p,*m;for(q=;q;q=q-next)m=(LNODE*)malloc(sizeof(structLNODE);m-data=q-data;m-next=;=m;for(p=;p;p=p-next)for(q=;q!=NULL&q-data!=p-data;q=q-next);m=(LNODE*)malloc(sizeof(structLNODE);m-data=p-data;m-next=;=m;if(q=NULL)showlist(head3);1.定义指针q,p,m,分别指向集合A,B,C的头指针的下一个元素。2

5、.用for循环将集合A的元素依次遍历存入集合C中。3.再用双重for循环将集合B中一个元素与集合A中各元素进行比较,若集合A的尾指针为零,则将A中没有这个元素,就将元素存入集合C中;否则证明集合A中有这个元素,就接着比较B中下个元素。4.最后利用showlist()函数将集合C显示出来。时间复杂度为O(n2);交运算voidmixlist(LNODEhead1,LNODEhead2,LNODEhead3)q=;p=;while(p!=NULL)&(p-data!=q-data)m=(LNODE*)malloc(sizeof(structLNODE);p=p-next;if(p!=NULL)&(

6、p-data=q-data)LNODE*q,*p,*m;while(q!=NULL)m-next=;=m;q=q-next;showlist(head3);1.定义指针q,p,m,分别指向集合A,B,C的头指针的下一个元素。2.用两个while循环将集合A中一个元素与集合B中各元素进行比较,若集合B的尾指针不为零且A中这个元素与集合B中某个元素相等,则将A中这个元素,存入集合C中;否则证明集合A中这个元素与集合B任意元素不相等,就接着比较A中下个元素。3.最后利用showlist()函数将集合C显示出来。进行了双重循环,所以时间复杂度为O(n2);差运算voiddifference(LNODE

7、head1,LNODEhead2,LNODEhead3)LNODE*q,*p,*m;q=;p=;while(p!=NULL)&(p-data!=q-data)q=q-next;m=(LNODE*)malloc(sizeof(structLNODE);m-data=q-data;m-next=;=m;p=p-next;if(p=NULL)while(q!=NULL)showlist(head3);实验题目:集合运算器需求分析:完成集合的并交差运算算法设计:交集:A集合与B集合求交集,将A中每个元素在B中比较,如果有则此元素属于AB并集:先复制B到C,将A集合中的每个元素在B中比较,如果没有插入C

8、中,C=AUB差集:A元素在B中如果没有,插入C,C=A-B储存结构:集合用带头结点链表储存,集合头结点用指针数组储存typedefstructLnodeintalp;structLnode*next;LNode,*LinkList;LinkListL10=NULL;算法分析:以并集为例LinkListBingList(LinkListLa,LinkListLb)/求并集,返回并集地址LNode*p,*q,*s;LinkListLc;if(!La|!Lb)returnNULL;Lc=CopyList(La);/复制A到Cq=Lb-next;for(;q;q=q-next)/对B元素依次扫描fo

9、r(p=La-next;p;p=p-next)/判断A中是否有此元素if(p-alp=q-alp)break;if(!p)/若无将此元素插入Cs=(LinkList)malloc(sizeof(LNode);s-next=NULL;s-alp=q-alp;Insert(Lc,s);returnLc;时间复杂度:On=mn空间复杂度:为链表储存,相对来说比较占空间界面:输入:创造集合时根据提示选择位置,之后没输入一个元素加一个回车,以#表示输入结束显示:可以随时显示所有集合测试:图中集合3为集合1并集合2西安邮电大学课内实验报告课程名称:数据结构与算法实验名称:集合运算专业名称:班级:学生姓名:

10、1405班学号,如果遇到不同的删除H1中的对应元素,最后返回H1。时间复杂度:n2并运算:H1H2H1和,如果遇到不同的添加到H2中,最后返回H2。时间复杂度:n2补运算:H1H2H1和,如果遇到相同的删除H1中的对应元素,最后返回H1。时间复杂度:n2四.该程序的功能和运行结果功能:集合的交并补运算。测试数据:测试1:输入集合1:1,2,3集合2:234并运算:2341测试数据:测试1:输入集合1:1,5,7集合2:2467交运算:7测试数据:测试1:输入集合1:1,2,5集合2:534补运算:12五.实验总结实验过程中充分理解了链表结构,灵活的应用了链表的增删操作,实验中遇到了程序错误,采

11、用局部标注排除的方法,在程序的固定的地方添加标识,错误即标识不显示,一步步排除错误,找到错误的源头。实验的优缺点:优点:实验方案简洁明了,很容易理解,整体框架清晰明了,不会难以理解,每次实现功能都是明确的功能函数调用,没有让程序执行进入死胡同这一说,进入函数内部出不来,对数据进行简单的处理后,直接返回结果。缺点:功能单一,每次输入后,只能执行一种运算,第二次做运算就必须退出重来,重新输入要运算的数据,麻烦,效率低下。对设计及调试过程的心得体会:程序设计时,应考虑到执行的每一步,不能一有思路,就动手写程序,应该有一个完整的设计思想,尽可能的想到程序执行的每一步,否则,经常会出现写到一半就写不下去

12、的情况,或者发现这个思路行不通,浪费时间,也不见成效,所以在一开始就应该规划好。对原实验方案的改进和对实验内容的发散性思考:实验程序每次只可以执行一次运算,可以尝试用循环实现和开辟新的空间,使其可以执行多次运算,同时也可以实现对多个集合一并运算。1实验过程中遇到的问题及解决办法;2实验方案的优点和缺点;3对设计及调试过程的心得体会;4对原实验方案的改进和对实验内容的发散性思考。一,问题重述集合中的元素为小字母a-小写字母z,实现以下运算:实现集合表示和集合的运算判断集合之间、元素和集合之间的关系二,源程序及注释#include#include#include#include#include#i

13、nclude#include#includechara100,b100,c100;intp,q,i,j,n;chard26,t;voidinit(char*a);voiddisplay(char*a);voidjiao(char*a,char*b,char*c);voidbing(char*a,char*b,char*c);voidcha(char*a,char*b,char*c);voidbu(char*a);voidjihejihe(char*a,char*b);voidyuansujihe(char*a);voidmain()charchoice;while(1)system(cls);coutn;coutai;voiddisplay(char*a)/输出一个集合coutp;coutai;coutq;coutbj;coutp;coutai;coutq;coutbj;for(i=1;ip;coutai;coutq;coutbj;for(i=1;in;coutai;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号