数据结构课程设计集合的并、交和差运算 (1)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构
课程设计报告设计题目:
专业计算机科学与技术
班级计091
学生张楠
学号3090911020
指导教师
起止时间2011.7.4~2011.7.9
22011 年夏季学期
目录
1.实验内容
实验题目:编制一个演示集合的并、交运算的程序。
题目:集合运算
功能:使用链表来表示集合,完成集合的合并,求交集等操作。
分步实施:
1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2.完成最低要求:
3.进一步要求:
要求:1)界面友好,函数功能要划分好
2)总体设计应画一流程图
3)程序要加必要的注释
4)要提供程序测试方案
1)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。
需求分析:
1、本演示程序中,集合的元素限定为整形数据。集合输入
的形式为一个以“0“为结束标志。
2、演示程序以用户和计算机的对话方式执行,即在计算机
终端上显示“提示信息“之后,由用户在键盘上输入演示程序中规定的运算命令;相应的输入数据和运算结果显示在其后。
3、程序执行的命令包括:
1)构造集合1;2)构造在集合2;3)求并集;4)求交集;
5)求差集;6)返回;7)结束。“构造集合1”和“构造集合2”时,需以整形的形式键入集合元素。
二、数据结构设计及流程图
为了实现上述程序的功能,应以有序链表表示集合。为此,需要两个抽象数据类型:有序表和集合。
1、有序表的抽象数据类型定义为:
input(linklist l)
初始条件:l是以l为头节点的空链表。
操作结果:生成以l为头节点的非空链表。
output(linklist l)
初始条件:l是以l为头节点的非空链表。
操作结果:将以l为头节点的链表中数据逐个输出。
2、集合的抽象数据类型定义为:
heji(linklist A,linklist B,linklist C)
初始条件:链表A、B、C已存在
操作结果:生成一个由A和B的并集构成的集合C。
jiaoji(linklist A,linklist B ,linklist ,C)
初始条件:链表A、B、C已存在
操作结果:生成一个由A和B的交集构成的集合C。
3、本程序抱含四个模块:
1)节点结构单元模块——定义有序表的节点结构;2)有序表单元模块——实现有序表的抽象数据类型;3)集合单元模块——实现集合获得抽象数据类型;4)主程序模块:
Void main(){
初始化;
do{
接受命令;
处理命令;
}while(“命令”!=“退出”);
}
流程图
三、源程序
# include
#include
#include
#include
typedef struct node
{
int data;
struct node* next;
}lnode,*linklist;
lnode *init_lnode();
void input(linklist l);
void jiaoji(linklist A,linklist B,linklist C); void heji(linklist A,linklist B,linklist C); void output(linklist l);
void main()
{
lnode *a,*b,*c;
a=init_lnode();
b=init_lnode();
c=init_lnode();
printf("求AB集合的交集和并集\n");
printf("请输入A集合的元素:");
input(a);
printf("\n请输入B集合的元素:");
input(b);
printf("\n输入完成\n");
printf("\n按任意键进入主菜单:");
getch();
do
{
char menu[]={"\n\n\n-----☆1.交集运算☆---------\n\n"
"---------☆2和集运算☆---------\n\n"
"---------☆3.差集运算☆---------\n\n"
"---------☆0. 退出☆---------\n\n" };
printf("%s",menu);
printf("\n请在0-3中选择:");
scanf("%d",&sel);
switch(sel)
{
case 1:
printf("AB集合的交集是:");
jiaoji(A,B,C);
output(C);
C->next=NULL;
break;
case 2:
printf("AB的合集是:");
heji(A,B,C);
output(C);
C->next=NULL;
break;
case 3:
chaji(A,B,C);
break;
case 0:
break;
}
}while(sel!=0);
} /*主函数结束*/
/**********初始化函数***************/
lnode * init_lnode()
{