数据结构集合运算求交集并集差集

  • 格式: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);