课程设计报告
课程设计题目: 集合的运算
学生姓名:柳志强
专 业:信息管理与信息系统
班 级:10210303
学 号:1021030334
指导教师:吴志强
2012年 06 月 20日
1、课程设计目的
课程设计为学生提供了一个既动手又动脑,实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。
实验报告书总体要求:
1、封面;
2、题目与流程图或模块图;
3、程序清单和运行结果;
4、小结(收获和体会);
5、装订成册.
2、课程设计题目和流程图
1、题目:求集合的运算问题
要求:1)集合的元素限定为小写字母
2)实现集合的交集、并集和差运算
2、数据定义
1)、有序表的抽象数据类型定义为:
readdata(linklist head)
初始条件:head是以head为头节点的空链表。
操作结果:生成以head为头节点的非空链表。
pop(linklist head)
初始条件:head是以head为头节点的非空链表。
操作结果:将以head为头节点的链表中数据逐个输出。
2)、集合的抽象数据类型定义为:
and(linklisthead1,linklist head2,linklist head3)
初始条件:链表head1、head2、head3已存在
操作结果:生成一个由head1和head2的并集构成的集合head3。
or(linklist head1,linklist head2,linklist head3)
初始条件:链表head1、head2、head3已存在
操作结果:生成一个由head1和head2的交集构成的集合head3。
differ(linklist head1,linklist head2,linklist head3)
初始条件:链表head1、head2、head3已存在
操作结果:生成一个由head1和head2的差集构成的集合head3。
3、模块图模块结构
系统主要由8个模块组成,分别是:
1、单链表的建立
2、单链表输出
3、集合交集
4、集合并集
5、集合差集
6、主函数
模块之间的结构如下:
3、程序清单和运行结果
1、程序清单
#include #include typedef struct Node { char data; struct Node*next; }*linklist; void readdata(linklist head) { linklist p; char a; scanf("%c",&a); while(a!='\\n') { p=(linklist)malloc(sizeof(struct Node)); p->data=a; p->next=head->next; head->next=p; scanf("%c",&a); } } void pop(linklist head) { linklist p; p=head->next; while(p!=NULL) { printf("%c",p->data); p=p->next; } printf("\\n"); } void and(linklist head1,linklist head2,linklist head3) { linklist p1,p2,p3; p1=head1->next; while(p1!=NULL) { p3=(linklist)malloc(sizeof(struct Node)); p3->data=p1->data; p3->next=head3->next; head3->next=p3; p1=p1->next; } p2=head2->next; while(p2!=NULL) { p1=head1->next; while((p1!=NULL)&&(p1->data!=p2->data)) p1=p1->next; if (p1==NULL) { p3=(linklist)malloc(sizeof(struct Node)); p3->data=p2->data; p3->next=head3->next; head3->next=p3; } p2=p2->next; } } void or(linklist head1,linklist head2,linklist head3) { linklist p1,p2,p3; p1=head1->next; while(p1!=NULL) { p2=head2->next; while((p2!=NULL)&&(p2->data!=p1->data)) p2=p2->next; if((p2!=NULL)&&(p2->data==p1->data)) { p3=(linklist)malloc(sizeof(struct Node)); p3->data=p1->data; p3->next=head3->next; head3->next=p3; } p1=p1->next; } } void differ(linklist head1,linklist head2,linklist head3) { linklist p1,p2,p3; p1=head1->next; while(p1!=NULL) { p2=head2->next; while((p2!=NULL)&&(p2->data!=p1->data)) p2=p2->next; if(p2==NULL) { p3=(linklist)malloc(sizeof(struct Node)); p3->data=p1->data; p3->next=head3->next; head3->next=p3; } p1=p1->next; } } void main(linklist head1,linklist head2,linklist head3) { int x; printf("shu ru shu ju,an hui che jian jie shu \\n"); head1=(linklist)malloc(sizeof(struct Node)); head1->next=NULL; head2=(linklist)malloc(sizeof(struct Node)); head2->next=NULL; head3=(linklist)malloc(sizeof(struct Node)); head3->next=NULL; printf("please input ji he 1 \\n"); readdata(head1); printf("please input ji he2 \\n"); readdata(head2); A:printf("1.bing ji 2.jiao ji 3.cha ji 4.end \\n"); do{ printf("qing xuan ze xu hao \\n"); scanf("%d",&x); switch(x) { case 1: printf("liang ge ji he de bing ji shi \\n"); and(head1,head2,head3); pop(head3); head3->next=NULL; break; case 2: printf("liang ge ji he de jiao ji shi \\n"); or(head1,head2,head3); pop(head3); head3->next=NULL; break; case 3: printf("liang ge ji he de cha ji shi \\n"); differ(head1,head2,head3); pop(head3); head3->next=NULL; break; case 4:break; default:goto A; } }while(x!=4); }_ 2、运行结果 a)求并集结果 b)求交集结果 c) 求差集结果 4、课程设计心得 这次为期一周的课程设计对我印象极为深刻,实验开始时,我对自己的题目还感到比较的迷茫,仅仅可以用一些基本的知识来写一些基本的语句,而对于集合运算整个程序的设计却是非常迷茫,经过一周的学习,加上向老师和同学的请教等现在对于自己的程序达到了完全的理解,在以后同样的问题上,我相信自己就可以很轻松的解决了。在这期间我们也遇到了好多的困难,但是通过吴老师的教导和对一些文献的参考等,使得我对知识有了更加深入的了解,这对我们以后的工作有很大的帮助,在这里向吴志强老师表示由衷的感谢。 一周的数据结构课程设计结束了。原计划的设计思想也基本实现,回首整个过程,我深刻的体会到了学无止境的道理,不仅加深了我对数据结构知识的了解和掌握,而且对程序的设计也有了更加深入的体会。与此同时,我的设计报告仍然有一些不足之处,一些集合元素判断问题等没有设计。因此不是很完美,但是学习的真正目的在于应用。这次实验对我来说仍然是一个很好的锻炼机会,是最宝贵的,通过不断的尝试和锻炼才能巩固自己所学的知识,提高自己的应用能力,这些经验对我走向社会都是一笔宝贵的财富。下载本文