ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:115.12KB ,
资源ID:10202352      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10202352.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计集合运算.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、数据结构课程设计集合运算电子与信息工程学院数据结构实 验 报 告 实验名称: 集合的运算 实验类型: 设 计 (验 证、设 计、创 新)班 级: 2013级电信三班 学 号: 7 : 陆杰 实验时间: 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

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

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

4、指针域,数据域中存储集合元素,指针域中存储下一个集合元素的位置; 3. 创建若干个基本函数,通过函数调用对链表进行操作,实现集合的交、并、差运算。 三 算法思想和程序的实现概述3.1 算法思想 定义一个链表,链表有整型数据和一个指向链表的指针,程序包含定义一个新链表的函数,集合并函数,集合交函数,集合差函数。求两集合交集并集差集从两集合的头结点开始,比较两集合元素大小,进行对应的操作,直到读取到两集合的末尾元素。主程序先定义三个集合,创建集合A读入A数据,创建集合B读入B数据,然后输出集合A,B的元素,求出两集合并集并输出。求两集合的交集和差集的运算与求并集的步骤类似,只需按提示输入即可。3.

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

6、出两链表中相同的元素。C)差函数 该函数用于实现集合的差运算,利用链表中的数据域进行判断。输出不同于被减集合中不存在的元素。四 程序流程图开始流程图:创建链表 定义链表求两集合的并集 求两集合的交集输入数据输入数据输入数据求两集合的差集 五 程序的实现改程序的实现步骤是定义链表,创建链表,输出链表。利用链表的来存储集合。利用三个函数分别实现课程要求程序实现的求并、求交和差三中运算。现分述如下:5.1 主函数void bangzhu() printf(nttt*); printf(nttt* 求集合的交并差 *); printf(nttt*n); void main() /* 主函数 */ st

7、ruct set *p,*q,*r; int m,n,node; bangzhu(); for(;) do printf(请输入您要选择操作的代码:n); printf(1:求两集合的并ABn); printf(2:求两集合的交ABn); printf(3:求两集合的差A-Bn); printf(0:退出该程序n); scanf(%d,&node); while(node3); if(node=0) exit(1); printf(ttt/*请输入集合A中元素的个数:*/n); scanf(%d,&m); createlist_p(p,m); /* 调用链表生成函数生成A链表 */ print

8、f(ttt/*请输入集合B中元素的个数:*/n); scanf(%d,&n); /* 调用链表生成函数生成B链表 */ createlist_p(q,n); printf(集合A中元素为:); printlist_p(p); /* 调用集合输出函数输出集合A */ printf(集合B中元素为:); printlist_p(q); /* 调用集合输出函数输出集合A */while(node3); switch(node) case 1: Addset( p,q,r);printf(AB:n);printlist_p(r);break; case 2: Subset( p,q,r);printf

9、(AB:n);printlist_p(r);break; case 3: Intset(p,q,r); printf(A-B:n);printlist_p(r);break; printf(n); 5.2 链表的生成void createlist_p(struct set *&p,int n) int i; struct set *L; p=(struct set *)malloc(sizeof(set); /* 申请结点p */ p-next=NULL; /* 定义p的next指针为空 */ for(i=n;i0;i-) L=(struct set *)malloc(sizeof(set);

10、 /* 申请结点L*/ printf(请输入该集合中第%d个整数元素:,n-i+1); scanf(%s,&L-coef); L-next=p-next; p-next=L; /生成新链表用于存放两集合中的元素 5.3 集合的输出void printlist_p(struct set *&p) struct set *L; int i; L=p-next; if(!L) printf(该表为空!n); while(L!=NULL) printf(%c ,L-coef); L=L-next; i+; printf(n); /打印输入的两集合中的元素 5.4 并运算函数void Addset(st

11、ruct set *&p,struct set *&q,struct set *&r) struct set *k,*m,*n; r=(struct set *)malloc(sizeof(set); /* 申请结点r */ r-next=NULL; /* 定义r的next指针为空 */ k=p-next; /* k指向p的下一个结点 */ for(;k;) m=(struct set *)malloc(sizeof(set); /* 申请结点m */m-next=r-next; r-next=m; m-coef=k-coef; k=k-next; /* 把第一个集合中的元素放在新集合中 */

12、 k=q-next; m=(struct set *)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=(struct set *)malloc(sizeof(set); m-next=r-next; r-next=m; m-coef=k-coef; k=k-next; /*

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

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

15、zeof(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) /* 比较链表p与q ,找出p中不同于q的元素存入链表r中 */ k=(struct set *)malloc(sizeof(set); k-next=r-next; r-next=k; k-coef=m-coef; m=m-next; /* 求A-B */ 该函数用于实现集合的差运算,利用链表中的数据域进行判断。输出不同于被减集合中不存在的元素。六 运

16、行结果分析6.1 程序主界面 图 6.1 程序主界面6.2整数集合并运算 图6.2 整数集合并运算6.3 整数集合交运算 图 6.3 整数集合交运算6.4 整数集合差运算图6.4 整数集合差运算6.5 字母集合并运算图6.5 字母集合并运算6.6 字母集合交运算图6.6 字母集合交运算6.7 字母集合差运算图6.7 字母集合差运算6.8 字母和数据集合并运算图6.8 字母和数据集合并运算6.9 字母和数据集合交运算图6.9 字母和数据集合交运算6.10 字母和数据集合差运算图6.10 字母和数据集合差运算6.11 退出程序 图6.11退出程七 源代码#include #include #inc

17、lude struct set char coef; struct set *next; ; /线性表的单链表存储结构void createlist_p(struct set *&p,int n) int i; struct set *L; p=(struct set *)malloc(sizeof(set); p-next=NULL; /建立一个带头结点的单链表 for(i=n;i0;i-) L=(struct set *)malloc(sizeof(set); /生成新节点 printf(请输入该集合中第%d个整数元素:,n-i+1); scanf(%s,&L-coef); L-next=

18、p-next; p-next=L; /插入到表头 void printlist_p(struct set *&p) struct set *L; int i; L=p-next; if(!L) printf(该表为空!n); while(L!=NULL) printf(%c ,L-coef); L=L-next; i+; printf(n); void Addset(struct set *&p,struct set *&q,struct set *&r) struct set *k,*m,*n; r=(struct set *)malloc(sizeof(set); r-next=NULL;

19、 k=p-next; for(;k;) m=(struct set *)malloc(sizeof(set); m-next=r-next; r-next=m; m-coef=k-coef; k=k-next; /r中存放p k=q-next; m=(struct set *)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=(s

20、truct set *)malloc(sizeof(set); m-next=r-next; r-next=m; m-coef=k-coef; k=k-next; /求AB void Subset(struct set *&p,struct set *&q,struct set *&r) struct set *k,*m,*n; r=(struct set *)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-coe

21、f) k=(struct set *)malloc(sizeof(set); k-next=r-next; r-next=k; k-coef=m-coef; n=n-next; /求AB void Intset(struct set *&p,struct set *&q,struct set *&r) struct set *k,*m,*n; r=(struct set *)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-ne

22、xt&(m-coef!=n-coef) k=(struct set *)malloc(sizeof(set); k-next=r-next; r-next=k; k-coef=m-coef; m=m-next; /求A-B void bangzhu() printf(nttt*); printf(nttt* 求集合的交并差 *); printf(nttt*n); void main() struct set *p,*q,*r; int m,n,node; bangzhu(); for(;) do printf(请输入您要选择操作的代码:n); printf(1:求两集合的并ABn); prin

23、tf(2:求两集合的交ABn); printf(3:求两集合的差A-Bn); printf(0:退出该程序n); scanf(%d,&node); while(node3); if(node=0) exit(1); 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(

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

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1