课程设计74939

上传人:lj****c 文档编号:166981830 上传时间:2022-11-02 格式:DOC 页数:18 大小:76KB
返回 下载 相关 举报
课程设计74939_第1页
第1页 / 共18页
课程设计74939_第2页
第2页 / 共18页
课程设计74939_第3页
第3页 / 共18页
点击查看更多>>
资源描述
数据结构课程设计报告 (201-202学年第二学期)题 目:集合的并交差和对称差信息科学与工程系设计内容、任务及具体要求1。1设计内容 编写一个程序,使其能够存放两个集合中的元素,并能使其实现集合的并交差和对称差的功能12设计任务及具体要求 首先,编写一个函数,使其实现创建单链表的功能,并把集合中元素分别输入到单链表中去;其次,在编写一个函数使其实把链表中的元素按升序排列的功能;在编写三个函数分别实现集合的并交差和对称差;最后,在编写一个函数,使其输出单链表.2概要设计2。1该系统的功能简介 该程序可以通过输入密码来实现两个集合的输入和并使集合中的元素按升序排列,且能实现这两个集合的并交差和对称差,最终把结果输出来.2。2总体程序框图从屏幕输入集A和集合B将A和B中的元素存储到线性表La和Lb,并按升序排列,删除其中相同的元素集合的对称差 集合的差集 集合的交集 集合的并集将结果输出来2。3各个模块之间的主要关系 先输入集合A和集合,将A和B中的元素存储到线性表L和,并按升序排列且删除不合法的元素后分别输出。这之后用指针求集合A和集合B的并集和交集并分别输出。由集合A和集合A的交集求出集合A和集合B的差集并输出。然后用集合AB的并集和集合AB的交集求出集合A和集合的对称差并输出.3系统功能模块的具体设计3.1各个模块的程序流程图及运行界面 ,输入密码模块2,集合输入的模块,集合的功能模块 32关键代码分析说明/-集合按升序排列-vidpau(danianbiao L)/函数功能:利用冒泡法,把链表中的元素按升序排列 /输入参数:L/输出参数:输入参数为引用参数,直接对输入参数进行修改,并保存结果。 返回值:无 /调用函数:无/返回函数:main()it uasu; srctjedia idinp,*iediaq;iedinLn;f(!jedianp) retr;ritf(把链表中的元素按升序排列); hie(jiein) /若jidianp存在,进行循环ieianqjidipet; /jedianq指向jiedanp后边的那个结点 ile(jiednq) /若idiq存在,进行循环 (jdianphujiianshju)/前后两个数据进行对比,如果前边的数据大于后边的那个数据,交换 /两个数据yuanujieianshuju;idan-huj=jidaqshuju;jiediaqshuju=unsu; jiediaq=iedinet ; /iedianq的指针往后移idia=jei-et ; /内循环结束,jiedianp的指针往后移/-集合A和集合B的并集-void ingji(dnianbiaoL1,alaniao L,anlianbiL3) /函数功能:实现集合和集合B的并集 /输入参数:L1,L /输出参数:L3 /返回值:无 /调用函数:无 /返回函数:mai() /已知单链表1和L2的元素按值非递减排列 /把L1和2合并起来,得到新的单链表L3,L3的元素也按值非递减排列 s jiedian *jidiapa; stcjian *jeiab; struct jiedanjdapc; sutjiedan *jiedians; jieaa=Lex; /jieanpa指向L1的第一个结点 jidianpb=L2-net; jedianpb指向L1的第一个结点L3(strujidian )maloc(sizeof(jiian)); /创建L3的头结点 iedinpc=3; i(jiiapa!jiedianpb) ieian-next=L-next; /单链表L1是不为空且单链表L2为空,直接把单链表L1除头结点外都挂 /在单链表L上 if(!jiedianpajediapb) iapcext=L2-nex; /单链表L1是为空且单链表L2不为空,直接把单链表L2除头结点外挂在 /单链表L上 if(!jieinpa&!jiediab) jiedancnext=NULL; /单链表L是为空且单链表L也为空,单链表L直接指向空 while(jiediap&edianb) 单链表L1和单链表L都不为空时,进行循环 if(jieinpa-shujdinpb-shuju) jiedias=(ructiedian*)malloc(sizeo(jean));jieiansshu=jedianpshju; jiediapcnext=jidns;jiedinp=idians; iedianpa=jiedip-net; / 如果单链表1中的一个数据比单链表中的2的一个数据小时, /把中的这个数据挂在单链表L3上,ediapa指向L1下一个结点 els f(jiianpashuju=jedipshuju) jedians(trct jiedin )malc(izef(jiedin)); jiedians-huju=iedipbsj; dianpnxt=jiedians; jiianpc=iedians; jiedianpjiedianpnxt; jiedanpbjiedianpbnext; /如果单链表1中的一个数据和单链表中的L2的一个数据相等时, /把L1中的这个数据挂在单链表L3上,jiedanpa和jidianpb都分别 /指向下一个结点 else jiedans(strucjedin)malloc(szeof(dan); jiedanu=jiedianpbshju; jidpcnxt=jiedan; dianpc=jieias; edanb=iediapnet; /如果单链表L1中的一个数据比单链表中的L2的一个数据大时, /把L中的这个数据挂在单链表L3上,jiedianb指向下L的下一个 /结点 jiediacnex=jiediaa?edapa:iedpb; /插入剩余的链 程序调试分析1,常见的语法错误会导致程序无法通过调试,比如:错将“=” 当做“=”用;“if”与“els”的配对出现错误等。2,常见的逻辑错误会导致程序不执行,比如:没有考虑当指针指向 空,而另外那个不指向空等。程序使用说明1,先输入正确的密码进入程序,否则无法使用该程序.2,选择使用程序提供的选项,可以得到想要的集合间的关系(并集交集差集和对称差)。6总结 通过此次课程设计,我更加熟悉了单链表的运用,在老师和同学的帮助下,能够集合间的并交差和对称差。这次设计,让我明白,设计思路很重要,在进行程序设计之前必须有一个完善的思路,才能顺利写出代码.虽然这次难度不大,但在设计过程中,我也遇到了很多大大小小的问题,这些问题暴露了我的不足,更让我明白细心是设计必须的.虽然代码运行成功,程序也正确,但是这个程序存在着很大的局限性。我需要学习更多的知识,来将它完善.致谢 感谢老师在这次课程设计中给与我的指导,总是令我思路更加一新,对于我出现的问题,老师总不厌其烦的给我讲,引导我自己发现问题并解决问题,从中学会了好多.感谢同学,感谢他们在我遇到问题,对我的无私帮助,耐心的给我讲解问题,并帮我解决问题.没有他们的点拨,我的程序也不会顺利完成。参考文献 C语言程序设计教程数据结构(C语言版)C+程序设计教程附:源程序/-/查询两个集合间关系的系统/集合间关系包括:并集、交集、差集、对称差/作者:崔旭燕/编写程序时间: 201年月1日/修改完成日期:210年4月15日/代码规范日期:0年4月20日/-/预处理命令icludtdio.h#iluestdlb.hnluestdlib#dfineLG 328#efiemima 1256/定义jiedian结构类型typedfsruct jiedianint shuju;strut jiedin *next;jieian,dnlanbia;/-创建单链表-oi chuaganlianbi(alini )/函数功能:输入集合中的元素,建立带头结点的单链线性表L。/输入参数:&/输出参数:输入参数为引用参数,直接对输入参数进行修改,并保存结果。 返回值:无 /调用函数:无/返回函数:main()anliabio; /的类型定义danlinbioj;nt x; /x为输入的集合中的元素L=(stct jiedin )maloc(sieo(iedian));nx=NLL; /先建立一个带有头结点的单链表L; /指针i指向头结点anf(”%d,&x); /输入集合中的一个元素wile(x!=FLAG) /当输入的集合中的元素不为FAG(3768)时,一直进行创建单链表j=(tr jiedan)malc(sizo(ein)); /创建一个结点jhuju=x; /把输入的集合中的元素赋值给j的数据域里inxt=j; /把挂在的后边 ij; /的指针往后移,指向此时的jsanf(d”,x); /输入集合中的下一个元素ineULL;/-输出单链表-vidhuchianbiao(dalinbio &)/函数功能:把生成的链表输出 /输入参数:/输出参数:输入参数为引用参数,直接对输入参数进行修改,并保存结果。 返回值:无 /调用函数:无/返回函数:man()strc iedian *jiediap;/jiedp类型的定义jiedianp=nt;i(jieia=NULL)printf(空集n);retun; /若生成的链表中无元素,则输出空集ese wile(jiedinp) /iedianp存在 pitf(”%d ,jiedian-shu); jiedia=jiediapnext; pin(nn”); /输出单链表中的各个元素-集合按升序排列-id paixu(alnbio )/函数功能:利用冒泡法,把链表中的元素按升序排列 /输入参数:L/输出参数:输入参数为引用参数,直接对输入参数进行修改,并保存结果。 /返回值:无 /调用函数:无/返回函数:main()in uasu; stuct jedin jedanp,iediaq;edanp=Lext;(!jiedan) eurn;pif(把链表中的元素按升序排列”); le(ieanp)/若jieian存在,进行循环jieianq=jiianpnet; /ieiq指向jidip后边的那个结点 whe(edanq) /若jeiq存在,进行循环 if(jiedianpshujuiedanqsuju)/前后两个数据进行对比,如果前边的数据大于后边的那个数据,交换 /两个数据yau=ieiap-shju;jidiapshuujieiaju;jiednuju=uans; eianq=jieianqne ; /jeinq的指针往后移jedanp=jieianpnext ; /内循环结束,jiediap的指针往后移/-删除集合中相同的元素-vidhnchu(linbiao &L)/函数功能:删除集合中相同的元素 输入参数:L/输出参数:输入参数为引用参数,直接对输入参数进行修改,并保存结果。 /返回值:无 /调用函数:无/返回函数:ai()sruct jiean *jiean,jeianq;jedap-nex; if(!iedin) return;while(jedinpnext)if (jiianp-shju=jiedianpnet-suu) jiinq=dianpnex; iedianpnext=jidiaqext; fe(iedian); esejiedian=jeaxt;-集合A和集合的并集-void b(danlinbiao1,daninbao L2,danliabiao 3)/函数功能:实现集合A和集合B的并集 /输入参数:L1,L2 /输出参数:L3 /返回值:无 /调用函数:无 /返回函数:main() /已知单链表L1和L2的元素按值非递减排列把L1和L2合并起来,得到新的单链表L3,L3的元素也按值非递减排列 stucten jidpa; strucjiedian dianb; stt iian *jiianpc; struc edanjedans; jiedanp=1ex; /jiediana指向L1的第一个结点 jieanpbLnext; /ieianpb指向L1的第一个结点 L=(stuc jiedian *)mallc(sizeo(jedan); /创建L3的头结点 iedinc=L3; i(iediapa&!jiedpb) jiianpnext=1-net; /单链表L1是不为空且单链表为空,直接把单链表L1除头结点外都挂 /在单链表L3上 f(!jidinpajiedianpb) iedanpne=2-net; 单链表L1是为空且单链表L不为空,直接把单链表L2除头结点外挂在 /单链表上 i(!jeianpa&!jeanpb) jidanpcnex=NULL; /单链表L是为空且单链表L2也为空,单链表L直接指向空 while(jiedianpa&iianpb) /单链表1和单链表都不为空时,进行循环 f(jiednpshujusu; jedianp-next=jidian; jiedianp=jiedians; jedanpjiedianpex; jedianb=ieianpbet; /如果单链表L1中的一个数据和单链表中的L的一个数据相等时, /把L1中的这个数据挂在单链表L3上,jieipa和jiedianpb都分别 /指向下一个结点 es iedans=(stru iedan)mloc(iz(ieian); jieinsshuj=jidianpbsuju; dianp-nxt=jiedians; jiedanp=ied; jiedianp=jiedanpnext; /如果单链表L1中的一个数据比单链表中的L2的一个数据大时, 把L2中的这个数据挂在单链表L3上,iedianb指向下L2的下一个 /结点 jieipc-xtedip?jidapa:edinpb; 插入剩余的链/-集合A和集合的交集-void jiaoji(daanio L1,dnanbiao L,dnlianba 3) /函数功能:实现集合A和集合的交集 /输入参数:L1,L2 /输出参数:3 /返回值:无 /调用函数:无 /返回函数:mai() /已知单链表L1和2的元素按值非递减排列/把L和L2中相同的元素放入3中,得到新的单链表3,L3的元素也 /按值非递减排列 trc jiedian *jdianp; stuct jiijiediapb; truct jiedn *edianp; struc edian *jiedian;jidian=-ne; /iiapa指向中的第一个结点 L3(sut jiedian *)malc(sizeof(jedn); /创建3的头结点 jedinc=L3; while(jieianpa) /jiedapa不为空时,进行循环 iedanp=L2net; /jiedipb指向L2中的第一个结点 wile(jidapbjidianpb-shuushuju)jdianpb=dianpb-ne; 当ediap存在且iinb指向2的元素比jiedianpa指向L1的/元素小时,jiedinpb移向下一个结点,直到循环结束 f(jiedab&jiedian-suj=jeianp-shuju) /当jidianp存在且jiedipb指向L2的元素和jidianp指向L1的 /元素相等时 jiedians=(srutiian *)allo(sizeo(jiedn); 创建一个新的节点 jidans-shj=jianahuju; /把jieiapa指向L的元素赋值给新的结点中的数据域 jdnpcnext=jedian; /把生成的这个结点挂在3链当中 jianpc=jedians; / jediapc指向这个结点 jiedianpjiianpanex; /jiedianpa指向下一个结点 idincnxtNUL; /jeinpc最后指向空 /-集合A和集合B的差集- void chaji(danlianbi L1,dniniao L2,aliabao &L3) /函数功能:实现集合A和集合B的差集 输入参数:L1,L2 /输出参数:L3 /返回值:无 /调用函数:无 /返回函数:main() /已知单链表L和L2的元素按值非递减排列/把L1和L2中相同的元素放入L3中,得到新的单链表L,L3的元素也 /按值非递减排列,L1是集合A,L2是集合和集合B的交集,L3是集合 /A和集合B差集 stu jiedan *jedapa; srct jiedia edanpb; truct jeianjdanpc; srct jedian jiedians; iianpaL1et; /jiediapa指向L1中的第一个结点 iedin=L2-net; /jidanpb指向L2中的第一个结点L3=(stru jiedan)ma(sizeof(jidin); /创建一个头结点 jidanL3; /idiapc指向L的头结点 pritf(集合A和集合B的差集为:); if(!idianpa) jiedianpcnex=NULL; return; /如果集合L1是空的,那么1与的差集也是空集 if(jidipa&!idpb) edinpc-ext=jidina; reurn; /如果集合L存在,但却是空集,那么差集为1,直接把L1除头结 /点外挂在L3 wle(ieianajiedap) /如果L存在,且L也存在,一直进行循环 if(iedanpashjidianpb-hu) jidans=(sruc dan)malloc(si(iei); ji-shujujiediana-shuu;ediancntiedians; jieanpc=jiias; jiedianpa=jidiapanex; / 如果单链表L1中的一个数据比单链表中的L2的一个数据小时,/把L1中的这个数据挂在单链表上,jiedina指向L1下一个结点 el if(iedinpa-suju=iediaphuju) jiedianajiedianp-next;iednpiiannet; /如果单链表L1中的一个数据和单链表中的L2的一个数据相等时, /idiaa和jiedinp都分别指向下一个结点lse ieianpb=jiedianbext; /如果单链表L1中的一个数据比单链表中的L的一个数据大时, /jiedinpb指向L2的下一个节点 iinet=jiediapa; /把L1中剩下结点都挂在L后 /-集合和集合的对称差- void uchench(danlianbio L1,danlanao L,danlianbaoL3) /函数功能:实现集合A和集合B的对称差 /输入参数:,L2 /输出参数:L3 /返回值:无 /调用函数:无 /返回函数:ain() /已知单链表L1和L2的元素按值非递减排列 /把L1和2中相同的元素放入L3中,得到新的单链表3,L的元素也 /按值非递减排列,L1是集合A和集合B的并集,是集合A和集合B的 /交集,L3是集合A和集合B对称差 tuct jidian *jiianpa; strct jein *jieianb;truct jiedin *jedanc; struct iedian iedias;jeinpa=L1ne; jiap=L2ne; 3(srut jidia *)alc(izeof(jieian); /创建一个头结点 jiediap=L3; /jidiapc指向L3的头结点prnt(集合A和集合B的对称差为:); if(!ianpa) jedianpcnx=NULL; rturn; /如果L1为空,那么集合A和集合B的对称差为空 (jiediaa&!jedanb) jiedanp-nextjiediapa; turn; /如果存在,且L2为空,那么集合A和集合B的对称差为1 while(jediap&jedinb) i(jiediapashjjidiab-hju) idian=(stuct jiedian)mllo(sizef(idian)); jiedis-shuju=iedianp-huj; idianpntjiedins; idianpcjiedians;edianpajieinpanext; / 如果单链表L1中的一个数据比单链表中的L的一个数据小时, /把L1中的这个数据挂在单链表L3上,jieianpa指向L1下一个结点 e i(jidinpshuj=jidianpbshuju) jiednpa=jieianpa-nex; jedapbjiepnet; /如果单链表L1中的一个数据和单链表中的2的一个数据相等 /时,jiedaa和jedianb都分别指向下一个结点ee jidiapb=jiedianpbnex; /如果单链表L1中的一个数据比单链表中的L2的一个数据大时 , /jidianb指向L2的下一个节点 jiediac-nt=jidiana; /把1中剩下结点都挂在3后 /-主函数-oid main() /函数功能:实现集合和集合的并集、交集、差集和对称差 输入参数:无 /输出参数:无 /返回值:无 /调用函数:huaianliabiao()、sulanbiao()、paixu()、sachu()、 /bingji()、jo()、chai()、duchenh() /返回函数:无 /La为集合A,Lb为集合,为集合A和集合B的并集,Ld为集合A /和集合B的交集,Le为集合A和集合的差集,Lf为集合A和集合 /的对称差 tuct jiedin *La,L,c,*Ld,*Le,*Lf;nt h,m,; /ch是输入的选择,是输入的密码,i是输入的次数 pintf( 请输入用户密码:); scnf(d”,m); /输入密码or(i0;i=3;i+) f(m=mma) /如果输入的密码与设置的密码相同时,跳出循环 rinf(” 输入密码正确nnnn); brak; else i(3) /当输入的密码不正确时,且没有输入三次的情况下,继续输入密码 prntf(” 您输入的密码错误,请重新输入:); scanf(”,&m); ese /当输入三次密码都不正确时,退出程序 pritf( 您输入密码错误,欢迎下次使用!); rurn; sstem(cl);rintf(-欢迎使用集合的并、交、差等功能-nnn); pri(输入集合和集合B并按升序输出:n); prtf(”请输入集合A中的元素:”);chungianlianbia(L); 输入集合A中的元素 paixu(La); /对A中的元素进行排序 shnchu(a); /删除集合A中相同的元素 hchulian(La); /输出排列好的A中元素 pt(请输入集合B中的元素:); chuagjanlianbao(L); /输入集合B中的元素 pixu(b); /对中的元素进行排序 hh(b); /删除集合A中相同的元素 chlinbio(); /输出排列好的中元素rintf(”); bingji(La,Lb,Lc); /调用集合的并集的函数 jaoji(La,b,Ld); /调用集合的交集的函数 syst(”s); do ritf(” *该程序的功能*n); pntf( 1-集合A和集合B的并集 AB n); prnt(” 2-集合A和集合B的交集 AB n”); pintf(” -集合A和集合B的差集 A-B n”); printf( 4集合A和集合B的对称差 AB n); printf( -退出 nn); prntf( *n); rntf(请输入选择(-4)n”); sanf(%d”,&); witch(h) cse : sytem(cs”); rintf(”集合A和集合的并集是:”); shchulaio(c); ;reak; ase 2: systm(”l); print(集合A和集合的交集是:”); shchuianbiao(Ld); ;brk; ase 3: syse(cls); chaji(La,Ld,Le); shuculanbiao(L); ;brk; s 4: sysem(”cs”);duichencha(Lc,Ld,L); shuulinia(); ;brea; cas 0: ytem(ls); pf(谢谢你的使用!n”); ;brek; hile();指导教师评语:成绩: 指导教师签名: 年 月 日文中如有不足,请您指教!18 / 18
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


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

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


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