数据结构集合运算求交集并集差集
- 格式:doc
- 大小:189.93 KB
- 文档页数:12
课程设计报告
课程设计题目: 集合的运算
学生姓名:柳志强
专 业:信息管理与信息系统
班 级:10210303
学 号:1021030334
指导教师:吴志强
2012年 06 月 20日
一、课程设计目的
课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。
实验报告书总体要求:
1、封面;
2、题目与流程图或模块图;
3、程序清单和运行结果;
4、小结(收获和体会);
5、装订成册.
二、课程设计题目和流程图
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、主函数
模块之间的结构如下:
主函数
单链表的建立
单链表输出 集合交集
集合并集 集合差集
三、程序清单和运行结果
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);