数据结构集合交、并报告_第1页
数据结构集合交、并报告_第2页
数据结构集合交、并报告_第3页
数据结构集合交、并报告_第4页
数据结构集合交、并报告_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课设题目:集合的交、并集专 业:班 级:姓 名: 学 号:完成日期:指导教师:一、 设计的题目 集合的交、并集。二、 设计目的 1.学会用顺序表、链表等线性表的知识去解决实际问题。 2.熟练使用WINDOWS环境下C+的使用; 3.学会高效率的输入源程序; 4.学会使用单步运行调试程序的机制; 5.熟悉文档和报告的基本制作技术; 6.通过课程设计,进一步熟悉各种数据结构的应用,加深对数据结构的理解。 数据结构课程设计是理解和掌握数据结构的重要环节,主要任务是实现各种数据组织中的数据逻辑结构,存储结构以及有关操作的算法。目的是使学生学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择

2、适当的逻辑结构、存储结构及相应的算法。另一方面,通过团队合作、文档编制、主页设计等环节对学生进行全方位的训练,最终达到培养学生的数据抽象能力和软件设计的能力。通过全部过程培养和锻炼学生的钻研能力、动手能力、分析问题和解决问题的实际能力。三、 总体设计 1.系统流设计 数据输入界面 主菜单界面 集合的差集运算 结束 集合的交集运算 集合的并集运算 1.1系统功能模块图2.系统模块设计 1)数据输入界面:构造函数void input(pointer M);实现集合元素的数据输入。 2)主菜单界面:构造函数void main();实现主菜单的显示。 3)集合的并集运算:构造函数void and(po

3、inter A,pointer B,pointer C);实现对两个集合的并集运算。 4)集合的交集运算:构造函数void or(pointer A,pointer B,pointer C);实现对两个集合的交集运算。 5)集合的差集运算:构造函数void differ(pointer A,pointer B,pointer C);实现集合A-B的运算。四、 详细设计 1.数据结构设计 为了能实现不受限制的输入元素,采用链表的结构保存元素信息,在增加一个元素时,创建一个元素的节点,将其插入到链表中,示意图。第二个元素第三个元素第一个元素 为此,先声明一个类型为typedef struct LN

4、ode的结构体类型指针,其成员为元素信息。然后通过对指针、链表等数据结构的操作,实现对两个集合的交、并、差集运算等一系列操作。其中,结构体定义如下:typedef struct LNode char data; struct LNode*next; *pointer; 2.模块接口设计 1)所有函数模块声明如下: void input(pointer M);/定义输入集合函数 void output(pointer M);/定义输出集合函数 void and(pointer A,pointer B,pointer C);/定义集合的并集函数 void or(pointer A,pointer

5、B,pointer C);/定义集合的交集函数 void differ(pointer A,pointer B,pointer C);/定义集合的差集函数 2)主要模块的实现系统以主函数void main()为入口,首先通过system("color b3")将背景颜色置为蓝色。 然后调用void input()函数,输入元素信息,然后进入主菜单界面。系统接收用户输入的选择,调用相应的函数,实现各功能。 3.几个主要模块的流程图 1)主函数调用输入函数,输入集合信息 显示主菜单 接受用户选择是否合法 否 是是否为4 否 是调用对应选项函数 退出系统 图2 主函数流程图 2)

6、集合的并集函数 主菜单 用户选择序号是否合法 否 是是否为1 否 是调用并集函数和输出函数 图3 求并集函数流程图 求交集、差集的流程图同求并集流程图类似。五、 设计结果与分析 1.设计结果 1)数据信息录入界面: 图4 数据录入界面2) 主菜单显示界面 图5 主菜单界面3) 运算结果显示界面 图6 运算结果显示2)程序调试和分析 程序调试通过,能够正常运行,并成功实现各功能函数。系统界面简洁,使用方便,功能齐全,数据结构的设计合理规范。 程序采用单链表的存储结构,通过结构体指针,并结合集合的相关数学思想(求交集、并集、差集的方法),实现各功能函数。 程序的不足在于不能循环录入数据并实现各功能

7、,只能录入一次数据进行相关操作。第二个问题是若功能号输入不正确,就不能进行下一步操作。通过修改、调试和运行,我解决了这些问题,使程序更加完美。六、 总结(收获和不足) 这次数据结构课设让我受益匪浅,不仅让我学到了很多以前不知道的知识,还让我发现了自己以前学习的漏洞和错误。这次课设给了我一次锻炼的机会,让我对以前学习的知识再次巩固了一遍。 这次课程设计我写的题目是集合的交并运算,这道题相对比较简单一些,在以前的试验中也曾写过类似的程序。这次编写的程序也存在不足之处:首先,由于对集合的三种运算的算法推敲不足,在链表类型及其尾指针的设置时出现错误,导致程序低效。后来通过调试,错误解决。再次,就是该算

8、法并不能排除重复输入相同字符的情况,也不能自动滤去非法字符(如空格、阿拉伯数字等)。这个问题需要设置字符判断语句解决。另外,为解决功能号非法输入时出现的问题,需在switch case语句中添加defult语句,利用fflush(stdin)(清除缓存函数)和system("pause")(系统暂停),可以让用户重新输入正确的功能号。 数据结构是一门非常实用的课程,可以学到很多非常有用的基础知识,对我们计算机专业的学生以后的编程开发有很大的帮助。通过这次课程设计,让我对链表、指针等逻辑结构、存储结构及相应的算法加深了理解,总之,收获颇大!程序源代码:#include<

9、stdio.h>#include<stdlib.h>typedef struct LNode/定义结构体类型指针 char data; struct LNode*next; *pointer; void input(pointer M);void output(pointer M);void and(pointer A,pointer B,pointer C);void or(pointer A,pointer B,pointer C);void differ(pointer A,pointer B,pointer C);void input(pointer M)/定义输入集

10、合函数 pointer p; char tmp; scanf("%c",&tmp); while(tmp!='n') p=(pointer)malloc(sizeof(struct LNode); /为p申请内存空间p->data=tmp; p->next=M->next; M->next=p; scanf("%c",&tmp); void output(pointer M)/定义输出集合函数 pointer p; p=M->next; while(p!=NULL) printf("

11、%3c",p->data); p=p->next; printf("n"); void and(pointer A,pointer B,pointer C)/定义集合的并集函数 pointer p1,p2,p3; p1=A->next; while(p1!=NULL) p3=(pointer)malloc(sizeof(struct LNode); p3->data=p1->data; p3->next=C->next; C->next=p3; p1=p1->next; p2=B->next; while

12、(p2!=NULL) p1=A->next; while(p1!=NULL)&&(p1->data!=p2->data) p1=p1->next;if (p1=NULL) p3=(pointer)malloc(sizeof(struct LNode); p3->data=p2->data; p3->next=C->next; C->next=p3; p2=p2->next; void or(pointer A,pointer B,pointer C)/定义集合的交集函数 pointer p1,p2,p3; p1=A-&

13、gt;next; while(p1!=NULL) p2=B->next; while(p2!=NULL)&&(p2->data!=p1->data) p2=p2->next;if(p2!=NULL)&&(p2->data=p1->data) p3=(pointer)malloc(sizeof(struct LNode); p3->data=p1->data; p3->next=C->next; C->next=p3; p1=p1->next; void differ(pointer A,po

14、inter B,pointer C)/定义集合的差集函数 pointer p1,p2,p3; p1=A->next; while(p1!=NULL) p2=B->next; while(p2!=NULL)&&(p2->data!=p1->data) p2=p2->next; if(p2=NULL) p3=(pointer)malloc(sizeof(struct LNode);p3->data=p1->data; p3->next=C->next; C->next=p3; p1=p1->next; void ma

15、in()/主函数 system("color b3");int x; printf("(输入数据,按回车键结束,第一个集合大于第二个集合!)n");pointer A,B,C;A=(pointer)malloc(sizeof(struct LNode); A->next=NULL; B=(pointer)malloc(sizeof(struct LNode);B->next=NULL; C=(pointer)malloc(sizeof(struct LNode); C->next=NULL; printf("请输入集合1:n&

16、quot;); input(A);/调用输入集合函数 printf("请输入集合2:n"); input(B);/调用输入集合函数 printf("数据输入完成!n");printf("nn");printf("主菜单:nnn");printf("ttt- 1.并集运算 -nn" ); printf("ttt- 2.交集运算 -nn"); printf("ttt- 3.差集运算 -nn" ); printf("ttt- 4. 结束 -nn" );do printf("请选择序号n"); scanf("%d",&x); switch(x) case 1: printf("两集合的并是n"); and(A,B,C);/调用并集函数output(C); C->next=NULL; break;case 2: printf("两集合的交是n");or(A,B,C);/调用交集函

温馨提示

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

评论

0/150

提交评论