集合的交并差
梦想的光芒-
集合的交并差
班级:网工一班
姓名:陈小龙
学号:
14051113
题目:编写一个演示集合的交并差运算的计算机程序
一、需求分析
1.
本次实验中要求输入的集合的元素类型为小写字母
a
到
z
,
集合输入结束的标志是以“回车符”为标志的,集合的输入
不限字符输入的
顺序且允许重复输入和输入非法字符。
2.
本次实验中输出的集合中不包含重复的元素
,
集合中的
元
素按
ASCII
从小到大排列输出且
将自动过滤输入的非法字符。
3.
本次实验的程序可以计算用户输入的两个集合的交集、并
集和补集;
4.
本次实验的测试数据有:
输入的集合为
Set1=
“
mag
azine
”
,
Set2=
“
paper
”
,
输出的集合为
并集为“
aegimnprz
”
,
交集为“
ae
”
,
< br>差集为
“
gimnz
”
;
输入的集合为
Set1=
“
012oper4a6tion89
”
,
Set2=
”
error
data
”
,
输出的集合为
并集为“
adeinoprt
”
,并集为“
< br>aeort
”
,
差集为
“
inp
”
。
二、概要设计
为实现上述程序的功能,
用有序链表表示集合。
因此,
需
要有两个抽象数据类型:有序表和集合。
p>
1.
有序表的抽象数据类型定义:
ADT OrderedList{
数据对象:
D={ai|ai
∈
CharSet,i=1,2...,n,n>=0}
数据关系:
R1={
∈
D,ai-1
基本操作:
void
shuru(jihe head)
操作结果:建立一个链表,把集合的元素储存在链表中。
void shuchu(jihe head)
操作结果:
链表
head
已存在,把链表的元素按照顺序输出
来。
void bing(jihe
head1, jihe head2, jihe head3)
操作结果:
已知链表
head1
,
head2
,
head3
,
用
head1
,
hea
d2
比较,把
head1
,
head2
中所有的元素用
head3
输出来,去
掉重复的数。
void jiao(jihe head1, jihe head2, jihe
head3)
操作结果:已知链表
head1
,
head2
,
head3<
/p>
,用
head3
输出
head1
,
head2
中共有的
元素。
void cha(jihe head1,
jihe head2, jihe head3)
操作结果:已知链表
head1
,
head2
,
head3
,用
head3
输出
head1
中有的但
head2
中没有元素。
}ADT
OrderedList
2.
程序包含两个模块
One
:
函数模块,用于操作链表,进行链表的初始化,集合
的交,并,差运算。
Two
:
主程序
Int main{
空链表的建立,
选择变量的建立
do{
接受命令
处理命令
}while
(命令
或
退出)
}
三.详细设计
1.
< br>元素类型,结点类型和指针类型
typedef struct LNode
针
{
char data;
struct LNode*next;
}*jihe;
void
shuru(jihe head)
//
定义
结构体类型指
//
结点类型,指针类型
//
定义输入集合函数
{
jihe p;
//
定义一个结点
char tmp;
//<
/p>
定义一个字符型变量用于输
入集合元素
scanf(
while(tmp!='n')
//
直到输入不是回车键为止
{
p=(jihe)malloc(sizeof(struct LNode));
//
分配空间
}
void shuchu(jihe head)
//
定义输出集合函数
{
jihe p;
//<
/p>
定义一个结点
p
用于输
< br>出集合
head
里的元素
p=head->next;
while(p!=NULL)
{
printf(
p->data=tmp;
p->next=head->next;
head->next=p;
scanf(
}
p=p->next;
}
printf(
}
void
bing(jihe head1, jihe head2, jihe head3)
p>
//
定义集合
的并集函数
< br>//
{
jihe p1,p2,p3;
//p1
用于遍历第一个集合,
p>
p2
用于遍历
第二个集合,
p3
用于生成第三个集合的元素
p1=head1->next;
while(p1!=NULL)
//
遍历第一个集合,把第一个集合
的
元素放入第三个集合里
{
p3=(jihe)malloc(sizeof(struct LNode));
p3->data=p1->data;
p3->next=head3->next;
head3->next=p3;
p1=p1->next;
}
p2=head2->next;
while(p2!=NULL)
//
遍历
第二个集合,用第一个集合
比较,把第二个集合里没有的元素放在第三个集合里