数据结构课程设计集合运算

上传人:无*** 文档编号:131180000 上传时间:2022-08-06 格式:DOC 页数:25 大小:480.50KB
收藏 版权申诉 举报 下载
数据结构课程设计集合运算_第1页
第1页 / 共25页
数据结构课程设计集合运算_第2页
第2页 / 共25页
数据结构课程设计集合运算_第3页
第3页 / 共25页
资源描述:

《数据结构课程设计集合运算》由会员分享,可在线阅读,更多相关《数据结构课程设计集合运算(25页珍藏版)》请在装配图网上搜索。

1、电子与信息工程学院数据结构实验报告1#指导教师:余先伦成绩:实验名称:集合的运算实验类型:设计(验证、设计、创新)班级:2013级电信三班学号:姓名:陆杰实验时间:2015年6月16日目录一 课程设计目的和要求二 问题描述及分析三 算法思想和程序的实现概述3.1 算法思想3.2 程序的实现概述四 程序流程图流程图五 程序的实现5.1主函数5.2 链表的生成5.3 集合的输出5.4 并运算函数5.5交运算函数六5.6运差行函数结果分析6.1程序主界面6.2整数集合并运算6.3 整数集合交运算6.4 整数集合差运算6.5 字母集合并运算6.6 字母集合交运算6.7 字母集合差运算6.8 字母和数据

2、集合并运算6.9 字母和数据集合交运算6.10 字母和数据集合差运算6.11 退出程序七 源代码总结九参考文献课程设计目的和要求目的:深入理解数据结构的基本理论,掌握数据存储结构的设计方法,掌握基于数据结构的各种操作的实现方法,训练对基础知识和基本方法的综合运用能力,增强对算法的理解能力,提高软件设计能力。在实践中培养独立分析问题和解决问题的作风和能力。要求:熟练运用C+语言、基本数据结构和算法的基础知识,独立编制一个具有中等难度的、解决实际应用问题的应用程序。通过题意分析、选择数据结构、算法设计、编制程序、调试程序、软件测试、结果分析、撰写课程设计报告等环节完成软件设计的全过程,不断地完善程

3、序以提高程序的性能。问题描述及分析问题描述:本课程设计中,集合的元素可以是字母a,b,-z,也可以是整数0,1,-9,集合的大小集合输入的形式为一个以“回车符”为结束标志的字符,允许出现重复字符或非法字符,程序应能自动滤去。输出的运算结果字符串中将不含重复字符或非法字符。问题描述:有两个集合A、B,要求它的交集、并集和差集C。用两个链表p、q存储集合A、B,用链表r存储集合C。描述该问题的存储结构,算法,并通过编写程序来实现。问题分析:41. 定义一个链表来存储集合元素;2. 链表L包括数据域和指针域,数据域中存储集合元素,指针域中存储下一个集合元素的位置;3. 创建若干个基本函数,通过函数调

4、用对链表进行操作,实现集合的交、并、差运算。三 算法思想和程序的实现概述3.1算法思想定义一个链表,链表有整型数据和一个指向链表的指针,程序包含定义一个新链表的函数,集合并函数,集合交函数,集合差函数。求两集合交集并集差集从两集合的头结点开始,比较两集合元素大小,进行对应的操作,直到读取到两集合的末尾元素。主程序先定义三个集合,创建集合A读入A数据,创建集合B读入B数据,然后输出集合A,B的元素,求出两集合并集并输出。求两集合的交集和差集的运算与求并集的步骤类似,只需按提示输入即可。3.2程序的实现概述(1)输入的形式和输入值的范围:输入是从键盘输入的,输入的内容为整数。(2)输出的形式从屏幕

5、输出,显示用户输入集合的元素,并显示进行运算后的值。(3)存储结构在这次设计中开始我是采用链式存储结构,使得集合的算法定义十分简洁。(4)算法实现定义链表,创建链表,输出链表。利用链表的来存储集合。利用三个函数分别实现课程要求程序实现的求并、求交和差三中运算。现分述如下:A)并运算函数该函数采取了用新集合存储两集合并后的新集合,利用一个for循环来消除新集合中相同的元素,使其在屏幕上只显示一次。B)交运算函数该函数用于实现集合的并运算,利用for嵌套实现两链表中数据的比较,输出两链表中相同的元素。C)差函数该函数用于实现集合的差运算,利用链表中的数据域进行判断。输出不同于被减集合中不存在的元素

6、。四 程序流程图流程图:五 程序的实现改程序的实现步骤是定义链表,创建链表,输出链表。利用链表的来存储集合。利用三个函数分别实现课程要求程序实现的求并、求交和差三中运算。现分述如下:5.1主函数voidbangzhu()printf(nttt*);printf(nttt*求集合的交并差*);printf(nttt*n);voidmain()/*主函数*/structset*p,*q,*r;intm,n,node;bangzhu();for(;)doprintf(请输入您要选择操作的代码:n);printf(l:求两集合的并AUBn);printf(2:求两集合的交AGBn);printf(3:

7、求两集合的差A-Bn);printf(O:退出该程序n);scanf(%d,&node);while(node3);if(node=0)exit(1);printf(ttt/*请输入集合A中元素的个数:*/n);scanf(%d,&m);createlist_p(p,m);/*调用链表生成函数生成A链表*/printf(ttt/*请输入集合B中元素的个数:*/n);scanf(d,&n);/*调用链表生成函数生成B链表*/createlist_p(q,n);printf(集合A中元素为:);printlist_p(p);/*调用集合输出函数输出集合A*/printf(集合B中元素为:);pri

8、ntlist_p(q);/*调用集合输出函数输出集合A*/while(node3);switch(node)case1:Addset(p,q,r);printf(AUB:n);printlist_p(r);break;case2:Subset(p,q,r);printf(AGB:n);printlist_p(r);break;case3:Intset(p,q,r);printf(A-B:n);printlist_p(r);break;printf(n);5.2链表的生成voidcreatelist_p(structset*&p,intn)inti;structset*L;p=(struetse

9、t*)malloc(sizeof(set);/*申请结点p*/p-next二NULL;/*定义p的next指针为空*/for(i=n;i0;i-)L=(struetset*)malloc(sizeof(set);/*申请结点L*/printf(请输入该集合中第%d个整数元素:,n-i+1);scanf(%s,&L-coef);L-next=p-next;p-next=L;/生成新链表用于存放两集合中的元素5.3集合的输出voidprintlist_p(structset*&p)structset*L;inti;L=p-next;if(!L)printf(“该表为空!n);while(L!=NU

10、LL)printf(%c,L-coef);L=L-next;i+;printf(n);/打印输入的两集合中的元素5.4并运算函数voidAddset(structset*&p,structset*&q,structset*&r)structset*k,*m,*n;r=(struetset*)malloc(sizeof(set);/*申请结点r*/r-next二NULL;/*定义r的next指针为空*/k二p-next;/*k指向p的下一个结点*/for(;k;)m=(struetset*)malloc(sizeof(set);/*申请结点m*/m-next=r-next;r-next=m;m-

11、coef=k-coef;k=k-next;/*把第一个集合中的元素放在新集合中*/k=q-next;m=(structset*)malloc(sizeof(set);m-next=r-next;r-next=m;m-coef=k-coef;k=k-next;for(;k;)for(n=r-next;(k-coef!=n-coef)&n-next;)n=n-next;/*与新集合中的元素比较,如果不同则链入链表中*/if(k-coef!=n-coef)&!(n-next)m=(structset*)malloc(sizeof(set);m-next=r-next;r-next=m;m-coef=

12、k-coef;k=k-next;/*对第二个集合中的元素进行分析*/*求AUB*/该函数采取了用新集合存储两集合并后的新集合,利用一个for循环来12集合运算消除新集合中相同的元素,是其在屏幕上只显示一次。5.5交运算函数voidSubset(structset*&p,structset*&q,structset*&r)structset*k,*m,*n;r=(struetset*)malloc(sizeof(set);/*申请结点r*/r-next=NULL;n=q-next;for(;n;)/*比较p和q链表中的元素,相同的元素存入链表r中*/m=p-next;for(;(m-coef!=

13、n-coef)&m-next;)m=m-next;if(m-coef=n-coef)k=(structset*)malloc(sizeof(set);k-next=r-next;r-next=k;k-coef=m-coef;n=n-next;/*求AAB*/该函数用于实现集合的并运算,利用for嵌套实现两链表中数据的比较,输出两链表中相同的元素。5.6差函数voidIntset(structset*&p,structset*&q,structset*&r)structset*k,*m,*n;r=(structset*)malloc(sizeof(set);r-next=NULL;m=p-nex

14、t;for(;m;)n=q-next;for(;(m-coef!=n-coef)&n-next;)n=n-next;if(!n-next&(m-coef!二n-coef)/*比较链表p与q,找出p中不同于q的元素存入链表r中*/k=(structset*)malloc(sizeof(set);k-next=r-next;r-next=k;k-coef=m-coef;m二mnext;/*求AB*/该函数用于实现集合的差运算,利用链表中的数据域进行判断。输出不同于被减集合中不存在的元素。六运行结果分析61程序主界面*数据结构集合运算实现对集合元素交并差运算*图6.1程序主界面15集合运算62整数集

15、合并运算图6.5字母集合并运算#集合运算图6.5字母集合并运算#集合运算c:CAProgr-EmFilesVMicrosoFtVisualStudioiMyProiectsVlllDebuqi.HexeaMX殖:KXWMWKJCMXM:沌MXW耳KX*求集合的交并差*WXWK)(XXKKXJCEKWJCKK殖:KXWKWKJCKZM:沌MXWK鬣雷该程序馨悩代码:冃的交|B合的差AT小诗输入集合中元素的个数:咛合厶口合“卑丄-卜整数元索沙口蠡牛蹙数危:4仔请输入集合B中兀索的个数:臥该知中兀=.合元素为龍3Ub=2247口图6.5字母集合并运算#集合运算图6.2整数集合并运算6.3整数集合交运

16、算64整数集合差运算尺请输入集合E口元素的了入理集台卫第1平整数兀素詢请输入奧合白口元素的个数;图6.4整数集合差运算nu-ln0B仃-BcaCArocramFileslMicroscftVisual5tudioMyProiecbsllDebugll.exe1个整数兀霆:22个整数兀素:43伞整数元素江两一合合合8S该该该諾纂翥42的BB作Un-BW8-卸的的的疗臥合合亠口程W两两两出”求泰退图6.5字母集合并运算17集合运算图6.5字母集合并运算#集合运算6.5字母集合并运算图6.5字母集合并运算#集合运算6.6字母集合交运算MrM出厝XXMrMMMieWMrXXMK*求集合的交并差*|頁普

17、中盖个兀寒:一二.学II贯2个元栄=由口兀畫戈J:fm集合B中刀素垢:s产*请输人集合中元素的个数:*Z二请输入集合B中元索的个数;斗MH:7嚟济轟聶彗障1码-码弋旳BE作UTftftft幸交差酉的的序惑合合合程喘集臬善/网两两出龜7玄OI图6.6字母集合交运算6.7字母集合差运算6.8字母和数据集合并运算图6.9字母和数据集合交运算19集合运算图6.9字母和数据集合交运算#集合运算睛睛8X请输入戻合白中兀素旳个数耒丙隼合的退岀诙翟序rR口r.JT把中T7售讨B:1丁兀畫“2个7L素;玄-*CzProgra*FilcsBicrosoftVisualStu.dio.MyProjcci:s1Deb

18、ugl-cxc口XBB请输入集合B中元素的个数nnATs话的的序心台台台秽童MM该W闪闪附出图6.9字母和数据集合交运算#集合运算图6.9字母和数据集合交运算#集合运算图6.8字母和数据集合并运算6.9字母和数据集合交运算图6.9字母和数据集合交运算20集合运算6.10字母和数据集合差运算Priijig:aMFilttTisuiilStudiaKMyPxojectslDeLug1eic-请输入趣第选拝探佢的代码1:汞丙集合的并AUB2:求两集合的交nQB3=求丙集合的差:退出養程序W素LLT-1.个个121含合S该该佳冃请个4-12a34墾该该町吁愉输仝只口D=32请请集集A-尺请输入集知中元

19、素的a人请输入集合B中元素的u4个数.个数:图6.10字母和数据集合差运算611退出程序图6.11退出程七源代码#include#include#includestructsetcharcoef;structset*next;/线性表的单链表存储结构voidcreatelist_p(structset*&p,intn)inti;structset*L;p=(structset*)malloc(sizeof(set);p-next=NULL;/建立一个带头结点的单链表for(i=n;i0;i-)L=(structset*)malloc(sizeof(set);/生成新节点printf(“请输入该

20、集合中第d个整数元素:,n-i+1);scanf(%s,&L-coef);L-next=p-next;p-next=L;/插入到表头voidprintlist_p(structset*&p)structset*L;inti;L=p-next;if(!L)printf(该表为空!n);while(L!=NULL)printf(%c,L-coef);L=L-next;i+;printf(n);voidAddset(structset*&p,structset*&q,structset*&r)structset*k,*m,*n;r=(structset*)malloc(sizeof(set);r-n

21、ext=NULL;k=p-next;for(;k;)m=(structset*)malloc(sizeof(set);m-next=r-next;r-next=m;m-coef=k-coef;k=k-next;/r中存放pk=q-next;m=(structset*)malloc(sizeof(set);m-next=r-next;r-next=m;m-coef=k-coef;k=k-next;for(;k;)for(n=r-next;(k-coef!=n-coef)&n-next;)n=n-next;if(k-coef!=n-coef)&!(n-next)m=(structset*)mall

22、oc(sizeof(set);m-next=r-next;r-next=m;m-coef=k-coef;k=k-next;求AUBvoidSubset(structset*&p,structset*&q,structset*&r)structset*k,*m,*n;r=(structset*)malloc(sizeof(set);r-next=NULL;n=q-next;for(;n;)m=p-next;for(;(m-coef!=n-coef)&m-next;)m=m-next;if(m-coef=n-coef)k=(structset*)malloc(sizeof(set);k-next=

23、r-next;r-next=k;k-coef=m-coef;n=n-next;求AGBvoidIntset(structset*&p,structset*&q,structset*&r)structset*k,*m,*n;r=(structset*)malloc(sizeof(set);r-next=NULL;m=p-next;for(;m;)n=q-next;for(;(m-coef!=n-coef)&n-next;)n=n-next;if(!n-next&(m-coef!=n-coef)k=(structset*)malloc(sizeof(set);k-next=r-next;r-nex

24、t=k;k-coef=m-coef;23集合运算m=m-next;/求A-Bvoidbangzhu()printf(nttt*);printf(nttt*求集合的交并差*);printf(nttt*n);voidmain()structset*p,*q,*r;intm,n,node;bangzhu();for(;)doprintf(请输入您要选择操作的代码:n);printf(l:求两集合的并AUBn);printf(2:求两集合的交AGBn);printf(3:求两集合的差A-Bn);printf(0:退出该程序n);scanf(%d,&node);while(node3);if(node=

25、0)exit(l);printf(ttt/*请输入集合A中元素的个数:*/n);scanf(%d,&m);createlist_p(p,m);printf(ttt/*请输入集合B中元素的个数:*/n);scanf(%d,&n);createlist_p(q,n);printf(集合A中元素为:);printlist_p(p);printf(集合B中元素为:);printlist_p(q);while(node3);switch(node)casel:Addset(p,q,r);printf(AUB:n);printlist_p(r);break;case2:Subset(p,q,r);prin

26、tf(AGB:n);printlist_p(r);break;case3:Intset(p,q,r);printf(A-B:n);printlist_p(r);break;printf(n);八 总结通过这次数据结构的课程设计,加深对所学知识理解的同时也将所学知识系统化。经过这几天的思考发现,数据结构自己学习的有多么的糟糕和肤浅,最初的程序之中有许多的漏洞和不足,调试之中不断出现错误,自己无法解决。向老师同学请教之后才得以解决,我深刻的意识到我与其他同学的差距,所幸通过这次课程设计能够是自己有所提高本程序经过的反复修改和调试,发现错误,解决错误,才能在正常运行,有正确的结果。兴奋之余也深深体会到编程的工作人员的不易,希望自己能将现在的收获应用到以后的工作中。九 参考文献1. C语言程序设计清华大学出版社2. 数据结构严蔚敏版清华大学出版社3. C+面向对象程序设计清华大学出版社4. C+语言课程设计清华大学出版社5. 上网查阅的有关停集合的运算的资料25

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