数据结构课程设计集合运算完整.docx
- 文档编号:11139455
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:13
- 大小:206.88KB
数据结构课程设计集合运算完整.docx
《数据结构课程设计集合运算完整.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计集合运算完整.docx(13页珍藏版)》请在冰豆网上搜索。
数据结构课程设计集合运算完整
数据结构课程设计集合运算完整
电子与信息工程学院数据结构
实验报告
实验名称:
集合的运算
实验类型:
设计(验证、设计、创新)
班级:
2013级电信三班
学号:
4327姓名:
陆杰
实验时间:
2015年6月16日
指导教师:
余先伦成绩:
八总结
九参考文献
一课程设计目的和要求
目的:
深入理解数据结构的基本理论,掌握数据存储结构的设计方法,掌握基于数据结构的各种操作的实现方法,训练对基础知识和基本方法的综合运用能力,增强对算法的理解能力,提高软件设计能力。
在实践中培养独立分析问题和解决问题的作风和能力。
要求:
熟练运用C++语言、基本数据结构和算法的基础知识,独立编制一个具有中等难度的、解决实际应用问题的应用程序。
通过题意分析、选择数据结构、算法设计、编制程序、调试程序、软件测试、结果分析、撰写课程设计报告等环节完成软件设计的全过程,不断地完善程序以提高程序的性能。
二问题描述及分析
问题描述:
本课程设计中,集合的元素可以是字母[a,b,…z],也可以是整数[0,1,…9],集合的大小集合输入的形式为一个以“回车符”为结束标志的字符,允许出现重复字符或非法字符,程序应能自动滤去。
输出的运算结果字符串中将不含重复字符或非法字符。
问题描述:
有两个集合A、B,要求它的交集、并集和差集C。
用两个链表p、q存储集合A、B,用链表r存储集合C。
描述该问题的存储结构,算法,并通过编写程序来实现。
问题分析:
1.定义一个链表来存储集合元素;
2.链表L包括数据域和指针域,数据域中存储集合元素,指针域中存储下一个集合元素的位置;
3.创建若干个基本函数,通过函数调用对链表进行操作,实现集合的交、并、差运算。
三算法思想和程序的实现概述
算法思想
定义一个链表,链表有整型数据和一个指向链表的指针,程序包含定义一个新链表的函数,集合并函数,集合交函数,集合差函数。
求两集合交集并集差集从两集合的头结点开始,比较两集合元素大小,进行对应的操作,直到读取到两集合的末尾元素。
主程序先定义三个集合,创建集合A读入A数据,创建集合B读入B数据,然后输出集合A,B的元素,求出两集合并集并输出。
求两集合的交集和差集的运算与求并集的步骤类似,只需按提示输入即可。
程序的实现概述
(1)输入的形式和输入值的范围:
输入是从键盘输入的,输入的内容为整数。
(2)输出的形式
从屏幕输出,显示用户输入集合的元素,并显示进行运算后的值。
(3)存储结构
在这次设计中开始我是采用链式存储结构,使得集合的算法定义十分简洁。
(4)算法实现
定义链表,创建链表,输出链表。
利用链表的来存储集合。
利用三个函数分别实现课程要求程序实现的求并、求交和差三中运算。
现分述如下:
A)并运算函数
该函数采取了用新集合存储两集合并后的新集合,利用一个for循环来消除新集合中相同的元素,使其在屏幕上只显示一次。
B)交运算函数
该函数用于实现集合的并运算,利用for嵌套实现两链表中数据的比较,输出两链表中相同的元素。
C)差函数
该函数用于实现集合的差运算,利用链表中的数据域进行判断。
输出不同于被减集合中不存在的元素。
四程序流程图
流程图:
五程序的实现
改程序的实现步骤是定义链表,创建链表,输出链表。
利用链表的来存储集合。
利用三个函数分别实现课程要求程序实现的求并、求交和差三中运算。
现分述如下:
主函数
voidbangzhu(){
printf("\n\t\t\t***********************************");
printf("\n\t\t\t*求集合的交并差*");
printf("\n\t\t\t*********************************\n");
}
voidmain()/*主函数*/
{
structset*p,*q,*r;
intm,n,node;
bangzhu();
for(;;)
{
do{
printf("请输入您要选择操作的代码:
\n");
printf("1:
求两集合的并A∪B\n");
printf("2:
求两集合的交A∩B\n");
printf("3:
求两集合的差A-B\n");
printf("0:
退出该程序\n");
scanf("%d",&node);
}while(node<0||node>3);
if(node==0)exit
(1);
printf("\t\t\t/*请输入集合A中元素的个数:
*/\n");
scanf("%d",&m);
createlist_p(p,m);/*调用链表生成函数生成A链表*/
printf("\t\t\t/*请输入集合B中元素的个数:
*/\n");
scanf("%d",&n);/*调用链表生成函数生成B链表*/
createlist_p(q,n);
printf("集合A中元素为:
");
printlist_p(p);/*调用集合输出函数输出集合A*/
printf("集合B中元素为:
");
printlist_p(q);/*调用集合输出函数输出集合A*/
while(node<0||node>3);
switch(node)
{
case1:
Addset(p,q,r);printf("A∪B:
\n");printlist_p(r);break;
case2:
Subset(p,q,r);printf("A∩B:
\n");printlist_p(r);break;
case3:
Intset(p,q,r);printf("A-B:
\n");printlist_p(r);break;
}
printf("\n");
}
}
链表的生成
voidcreatelist_p(structset*&p,intn)
{
inti;
structset*L;
p=(structset*)malloc(sizeof(set));/*申请结点p*/
p->next=NULL;/*定义p的next指针为空*/
for(i=n;i>0;i--)
{
L=(structset*)malloc(sizeof(set));/*申请结点L*/
printf("请输入该集合中第%d个整数元素:
",n-i+1);
scanf("%s",&L->coef);
L->next=p->next;
p->next=L;
}
}
据结构严蔚敏版清华大学出版社
++面向对象程序设计清华大学出版社
++语言课程设计清华大学出版社
5.上网查阅的有关停集合的运算的资料
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 集合 运算 完整