集合运算器

上传人:今*** 文档编号:108094272 上传时间:2019-10-22 格式:DOC 页数:12 大小:622.71KB
返回 下载 相关 举报
集合运算器_第1页
第1页 / 共12页
集合运算器_第2页
第2页 / 共12页
集合运算器_第3页
第3页 / 共12页
集合运算器_第4页
第4页 / 共12页
集合运算器_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《集合运算器》由会员分享,可在线阅读,更多相关《集合运算器(12页珍藏版)》请在金锄头文库上搜索。

1、 西 安 邮 电 大 学 (计算机学院)课内实验报告课程名称: 数据结构与算法实验名称: 集合运算器 专业名称: 计算机科学与技术班 级: 计科1302班 学生姓名: 张妍学号(8位):04131061指导教师: 王曙燕实验日期: 2014年9月24 日一. 实验目的(实验目的要明确)加深对C语言的理解与掌握,对于给定的题目要求会运用所学基础知识如函数调用、值传递、指针等,设计合理有效的算法来进行处理。进一步提高解决问题的能力二. 实验内容(实验内容描述清楚,对实验所涉及到的知识点分析要到位.)此程序主要实现集合的并、交、差的运算。首先用结构体定义集合元素为char类型,利用指针将输入的元素存

2、到集合A和集合B中,然后在main()函数中使用了mixlist()(交运算),megrelist()(并运算),difference()(差运算)构成菜单供用户选择,通过值传递传给各函数,从而A、B集合在各函数中进行运算,并把所得元素放入C集合。三. 实验方案设计(对基本数据类型定义要有注释说明,解决问题的算法思想描述要完整,算法结构和程序功能模块之间的逻辑调用关系要清晰,关键算法要有相应的流程图,对算法的时间复杂度要进行分析) 1.功能模块图 主菜单 补运算模块差运算模块交运算模块显示模块输入模块主菜单do printf( 1.集合的交运算n);printf( 2.集合的并运算n);pri

3、ntf( 3.集合的A对B的差运算n);printf( 4.集合的B对A的差运算n); printf( 请选择(0-4):);scanf(%d,&choice);switch(choice)case 1:mixlist(linklist1,linklist2,linklist3); break;case 2:megrelist(linklist1,linklist2,linklist3); break;case 3:difference(linklist1,linklist2,linklist3); break; case 4:difference(linklist2,linklist1,li

4、nklist3); break;case 0: break;while(choice!=0); return 0;1、先写出用户可执行的功能,并用用数字代替功能,用switch()选择结构让用户进行选择, 其中,0代表退出系统。2、选择后,函数会马上执行功能,运行完后按返回键会返回主菜单。3、用do-while循环,只要用户选择的不是0,循环会一直进行,即一直返回主菜单。并运算void megrelist(LNODE head1,LNODE head2,LNODE head3)LNODE *q,*p,*m;for(q=head1.next;q;q=q-next) m=(LNODE*)mallo

5、c(sizeof(struct LNODE);m-data=q-data;m-next=head3.next;head3.next=m;for(p=head2.next;p;p=p-next)for(q=head1.next;q!=NULL&q-data!=p-data;q=q-next) ; if(q=NULL) m=(LNODE*)malloc(sizeof(struct LNODE);m-data=p-data;m-next=head3.next;head3.next=m; showlist(head3);1. 定义指针q,p,m,分别指向集合A,B,C的头指针的下一个元素。2. 用fo

6、r循环将集合A的元素依次遍历(直至尾指针为零)存入集合C中。3. 再用双重for循环将集合B中一个元素与集合A中各元素进行比较,若集合A的尾指针为零,则将A中没有这个元素,就将元素存入集合C中;否则证明集合A中有这个元素,就接着比较B中下个元素。4. 最后利用showlist()函数将集合C显示出来。时间复杂度为O(n2);交运算void mixlist(LNODE head1,LNODE head2,LNODE head3) LNODE *q,*p,*m;q=head1.next; while(q!=NULL)p=head2.next;while(p!=NULL)&(p-data!=q-da

7、ta)p=p-next;if(p!=NULL)&(p-data=q-data) m=(LNODE*)malloc(sizeof(struct LNODE);m-data=q-data;m-next=head3.next;head3.next=m;q=q-next; showlist(head3);1.定义指针q,p,m,分别指向集合A,B,C的头指针的下一个元素。2.用两个while循环将集合A中一个元素与集合B中各元素进行比较,若集合B的尾指针不为零且A中这个元素与集合B中某个元素相等,则将A中这个元素,存入集合C中;否则证明集合A中这个元素与集合B任意元素不相等,就接着比较A中下个元素。3

8、.最后利用showlist()函数将集合C显示出来。进行了双重循环,所以时间复杂度为O(n2);差运算void difference(LNODE head1,LNODE head2,LNODE head3) LNODE *q,*p,*m;q=head1.next; while(q!=NULL)p=head2.next;while(p!=NULL)&(p-data!=q-data)p=p-next;if(p=NULL) m=(LNODE*)malloc(sizeof(struct LNODE);m-data=q-data;m-next=head3.next;head3.next=m;q=q-ne

9、xt; showlist(head3);1.定义指针去q,p,m,分别指向集合A,B,C的头指针的下一个元素。2.用两个while循环将集合A中一个元素与集合B中各元素进行比较,若集合B的尾指针为零,则将A中这个元素,存入集合C中;否则证明集合B中有这个元素,就接着遍历集合A中下个元素。3.最后利用showlist()函数将集合C显示出来。进行了双重循环,所以时间复杂度为O(n2);显示模块void showlist(LNODE head)LNODE *p;printf(集合元素如下n);for(p=head.next;p;p=p-next) printf(%c,p-data); printf

10、(,); printf(n);时间复杂度为O(n);先定义指针p,让p指向head.next,用for循环(判断条件是尾指针指向为零)依次遍历集合元素,每循环一次输出一个集合元素。输入模块void initLnodelink(LNODE *head)char x;LNODE *p;LNODE *q;printf(请输入集合中的一个元素(直接回车为结束):); flushall(); scanf(%c,&x);while(x!=n)p=(LNODE*)malloc(sizeof(LNODE);p-data=x;p-next=NULL;if(head-next=NULL)head-next=p;e

11、lseq-next=p;q=p; printf(请输入集合中的一个元素(直接回车为结束):); flushall(); scanf(%c,&x);showlist(* head);1. 先定义char类型的集合元素和两个LNODE类型q,p指针。2. 输入值,用while循环体判断所输入的值是否为回车,若不是循环继续,是回车则循环结束。判断为所输入值不是回车后,指针q申请空间将所输入的值存入,接着判断是否原指针存在,若不存在,则q指向head.next,依次进行循环遍历,构成一个指针,且将值存进。若存在,则通过q,p指针依次遍历将输入值存进链表中。3. 最后利用showlist()函数将所得集

12、合显示出来。函数调用图main()函数Meger()函数Difference()函数intLnodelink()函数Mixlist()函数 Showlist()函数 流程图并运算 交运算 定义指针 定义指针将集合A中元素依次与集合B中各元素进行比较,出现与B中某元素相等的则存入C中。将集合A中元素输入集合C中将集合B中元素依次与A中元素比较,若出现与集合A中不相等的元素,则将该元素存入C中显示运算后的C集合显示运算后的C集合差运算 定义指针将集合A(或B)中元素依次与集合B(或A)中各元素进行比较,出现与B(或A)中某元素不相等的则存入C中。显示运算后的C集合输入 定义指针判断输入的值是否为回车,若是则循环结束,若不是将值存进链表中显示得到的集合四. 该程序的功能和运行结果(至少有三种不同的测试数据和相应的运行结果,充分体现该程序的鲁棒性)五. 实验总结(实验体会真实可信,不少于300字)1实验过程中遇到的问题及解决办法;2实验方案的优点和缺点;3对设计及调试过程的心得体会;4对原实验方案的改进和对实验内容的发散性思考。 因为上学期写过图书管理系统的程序,所以开始时对菜单较熟悉,并很快写好了,之后就进行值的输入,由于对链表不是很熟,根据

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号