typedef struct ListNode {
int data; //集合中的元素值 struct ListNode *next;//集合元素指针域
}ListNode,*LinkList;//结点,结点指针
/************************************************************************/ /********************各个功能的函数的实现********************************/ /************************************************************************/
void InitList(LinkList *L) ; //初始化链表
LinkList CreateSet(LinkList L); //创建集合1 LinkList CreateSet2(LinkList L); //创建集合2 LinkList Union(LinkList A,LinkList B,LinkList C); //求出并集 LinkList Intersection(LinkList A,LinkList B,LinkList L); //求出交集 LinkList Difference(LinkList A,LinkList B, LinkList C); //求出差集 int Dikaer(LinkList A,LinkList B); //求笛卡尔积 void PrintSet(LinkList L); //打印链表
/************************************************************************/ /********************主函数主菜单模块************************************/ /************************************************************************/
char menu_select(); int main() {
LinkList A, B, C, L; //A,B作为原始集合,C,L为运算后的集合 //初始化链表A,B,C,L
InitList(&A); InitList(&B); InitList(&C); InitList(&L);
printf(\㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣\\n\ printf(\㊣ (∩_∩)O(∩_∩)指导老师:王连相(∩_∩)OO(∩_∩) ㊣\\n\
printf(\㊣ (∩_∩)O(∩_∩)制作人:袁继伟 孟卫严 苟岩O(∩_∩)O(∩_∩) ㊣\\n\ printf(\㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣ ㊣\\n\\n\ for ( ; ;) {
switch(menu_select()) //用menu_select()返回的数字作为选择
26
{ case 1:
printf(\∩_∩)0创建集合1(∩_∩)\\n\\n\ CreateSet(A) ; PrintSet(A); break; case 2:
printf(\∩_∩)O创建集合2(∩_∩)O\\n\\n\ CreateSet2(B) ; PrintSet(B); break;
case 3:
printf(\⊙o⊙)求并集(⊙o⊙)\\n\\n\ Union(A,B,C);
printf(\所求并集A∪B=\\n\ PrintSet(C); break; case 4:
printf(\⊙o⊙)求交集(⊙o⊙)\\n\\n\ Intersection(A,B,L);
printf(\所求交集为A∩B=\\n\ PrintSet(L); break; case 5:
printf(\⊙o⊙)求差集(⊙o⊙)\\n\\n\ Difference(A,B,C);
printf(\所求差集A-B=\\n\ PrintSet(A); printf(\
Difference(B,A,C);
printf(\所求差集B-A=\\n\ PrintSet(B); printf(\ break; case 6:
printf(\⊙o⊙)求笛卡尔积(⊙o⊙)\\n\\n\ Dikaer(A,B); break; case 7:
printf(\⊙o⊙)打印所求集合(⊙o⊙)\\n\\n\
27
PrintSet(L); break; case 0:
printf(\∩_∩)O退出O(∩_∩)O\\n\\n\
printf(\感谢您的使用!★★★★★\\a\\a\\a\\a\\a\\n\\n\ exit(1); break; default:
printf(\您输入有误,请您重新输入!O(∩_∩)O谢谢\\n\\n\ } }
return 0; }
char menu_select() {
int cn; //要选择的数字 printf(\★★★★★★★集合运算器★★★★★★★\\n\
printf(\ printf(\◇ ◇ ◇ ◇ ◇ 1.创建集合1,请输入1◇ ◇ ◇ ◇ ◇\\n\ printf(\◇ ◇ ◇ ◇ ◇ 2.创建集合2,请输入2◇ ◇ ◇ ◇ ◇\\n\ printf(\◇ ◇ ◇ ◇ ◇ 3.求出并集 ,请输入3◇ ◇ ◇ ◇ ◇\\n\ printf(\◇ ◇ ◇ ◇ ◇ 4.求出交集 ,请输入4◇ ◇ ◇ ◇ ◇\\n\ printf(\◇ ◇ ◇ ◇ ◇ 5.求出差集 ,请输入5◇ ◇ ◇ ◇ ◇\\n\ printf(\◇ ◇ ◇ ◇ ◇ 6.笛卡尔积, 请输入6◇ ◇ ◇ ◇ ◇\\n\ printf(\◇ ◇ ◇ ◇ ◇ 7.打印集合, 请输入7◇ ◇ ◇ ◇ ◇\\n\ printf(\◇ ◇ ◇ ◇ ◇ 0.退出程序, 请输入0◇ ◇ ◇ ◇ ◇\\n\
printf(\ printf(\请选择!\\n\ for(; ;) {
scanf(\输入选择的数字 break; }
return cn; }
//链表各个基本功能的实现
28
void InitList(LinkList *L) //初始化链表,,注意啦!!这里传的是指针的地址 {
*L = (ListNode *)malloc(sizeof(ListNode)); (*L)->next = NULL; }
LinkList CreateSet(LinkList L) {
LinkList p = L,q = NULL; //头指针为L printf(\正在从文件中读取数据,请稍等...\\n\ // 延迟文件读取
for(int i = 0; i < 20; i++) {
printf(\☆ \ Sleep(40); }
printf(\
//读取产生的随机数作为集合的元素 FILE *rfile;
rfile = fopen(\ if ( rfile == NULL ) {
printf(\ return NULL; }
int rs = 0;
int rra[20] = {0};
rs = fread(rra, sizeof(int),20,rfile); //读取随机数
for ( int j = 0 ; j < rs; j++) {
q = NULL;
q = (LinkList)malloc(sizeof(ListNode)); //给要插入的元素分配空间 q->next=NULL;
q->data = rra[j]; //读取元素值 p->next = q;
p = p->next; //读取下一个元素
}
29
fclose(rfile);
return L; //返回集合的头指针 }
LinkList CreateSet2(LinkList L) {
LinkList p = L,q = NULL;
printf(\正在从文件中读取数据,请稍等...\\n\ // 延迟
for(int i = 0; i < 20; i++) {
printf(\☆ \ Sleep(40); }
printf(\
//读取产生的随机数作为集合的元素 FILE *rfile;
rfile = fopen(\ if ( rfile == NULL ) {
printf(\ return 0; }
int rs = 0;
int rra[20] = {0}; //读取元素
rs = fread(rra, sizeof(int),20,rfile);
for ( int j = 0 ; j < rs; j++) {
LinkList q = NULL;
q = (LinkList)malloc(sizeof(ListNode)); q->next=NULL;
q->data = rra[j]; //读取元素值 p->next = q; p = p->next; }
fclose(rfile);
return L;
30