集合的交并差

绝世美人儿
823次浏览
2021年02月07日 04:57
最佳经验
本文由作者推荐

梦想的光芒-

2021年2月7日发(作者:拉杆书包)


集合的交并差



班级:网工一班





姓名:陈小龙




学号:


14051113


题目:编写一个演示集合的交并差运算的计算机程序




一、需求分析



1.


本次实验中要求输入的集合的元素类型为小写字母


a


到


z


,

< p>
集合输入结束的标志是以“回车符”为标志的,集合的输入


不限字符输入的 顺序且允许重复输入和输入非法字符。



2.


本次实验中输出的集合中不包含重复的元素


,


集合中的 元


素按


ASCII


从小到大排列输出且 将自动过滤输入的非法字符。



3.


本次实验的程序可以计算用户输入的两个集合的交集、并


集和补集;

4.


本次实验的测试数据有:


输入的集合为


Set1=


“


mag azine


”


,


Set2=

< p>
“


paper


”


,


输出的集合为



并集为“


aegimnprz


”


,


交集为“


ae


”


,

< br>差集为


“


gimnz


”


;



输入的集合为


Set1=


“


012oper4a6tion89


”


,


Set2=


”


error data


”


,



输出的集合为



并集为“


adeinoprt


”


,并集为“

< br>aeort


”


,


差集为


“


inp


”


。



二、概要设计




为实现上述程序的功能,


用有序链表表示集合。


因此,


需


要有两个抽象数据类型:有序表和集合。



1.


有序表的抽象数据类型定义:




ADT OrderedList{



数据对象:


D={ai|ai


∈


CharSet,i=1,2...,n,n>=0}


数据关系:


R1={|ai-1,ai


∈


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


,

< p>
head2


中所有的元素用


head3

< p>
输出来,去


掉重复的数。



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

< p>
输出


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)






//


定义集合


的并集函数

< br>//


{






jihe p1,p2,p3;



//p1


用于遍历第一个集合,


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)






//


遍历 第二个集合,用第一个集合


比较,把第二个集合里没有的元素放在第三个集合里


梦想的光芒-


梦想的光芒-


梦想的光芒-


梦想的光芒-


梦想的光芒-


梦想的光芒-


梦想的光芒-


梦想的光芒-