求两个集合的交集、差集和并集
2016-05-25 16:05
489 查看
#include <stdio.h> #include <stdlib.h> typedef struct node{ char data; struct node * next; }Linklist; //尾插入法 Linklist * createLinklist2(){ char x; Linklist * head,* p,* q; head = (Linklist *)malloc(sizeof(Linklist)); head->next = NULL; q = head; printf("please input the values of the list!\n"); scanf("%c",&x); while(x != '\n'){ p = (Linklist *)malloc(sizeof(Linklist)); p->data = x; p->next = NULL; q->next = p; q = p; scanf("%c",&x); } return head; } //打印 void print(Linklist * head){ Linklist * p; p = head->next; while(p != NULL){ printf("%2c",p->data); p = p->next; } printf("\n"); } int main(){ Linklist * La; Linklist * Lb; Linklist * Lc; //Lc链表中保存的是集合A和集合B的交集 Linklist * Ld; //Ld链表中保存的是集合A和集合B的差集 Linklist * Le; //Le链表中保存的是集合A和集合B的并集 Linklist * pa,* pb,* pd; Linklist * p,* q; int flag1; int flag2; printf("create La!\n"); La = createLinklist2(); printf("\nLa:\n"); print(La); printf("\n"); printf("create Lb!\n"); Lb = createLinklist2(); printf("\nLb:\n"); print(Lb); //集合A和集合B的交集 Lc = (Linklist *)malloc(sizeof(Linklist)); Lc->next = NULL; q = Lc; pa = La->next; while(pa){ pb = Lb->next; flag1 = 0; while(pb){ if(pa->data == pb->data){ flag1 = 1; break; }else{ pb = pb->next; } } if(flag1 == 1){ p = (Linklist *)malloc(sizeof(Linklist)); p->data = pa->data; p->next = q->next; q->next = p; q = p; } pa = pa->next; } printf("A集合和B集合的交集是:"); print(Lc); //集合A和集合B的差集 Ld = (Linklist *)malloc(sizeof(Linklist)); Ld->next = NULL; q = Ld; pa = La->next; while(pa){ pb = Lb->next; flag2 = 0; while(pb){ if(pa->data == pb->data){ flag2 = 1; break; } pb = pb->next; } if(flag2 == 0){ p = (Linklist *)malloc(sizeof(Linklist)); p->data = pa->data; p->next = q->next; q->next = p; q = p; } pa = pa->next; } printf("A集合和B集合的差集是:"); print(Ld); //集合A和集合B的并集(AUB = (A-B)UB) Le = (Linklist *)malloc(sizeof(Linklist)); Le->next = NULL; q = Le; pb = Lb->next; pd = Ld->next; while(pb){ p = (Linklist *)malloc(sizeof(Linklist)); p->data = pb->data; p->next = q->next; q->next = p; q = p; pb = pb->next; } while(pd){ p = (Linklist *)malloc(sizeof(Linklist)); p->data = pd->data; p->next = q->next; q->next = p; q = p; pd = pd->next; } printf("A集合和B集合的并集是:"); print(Le); return 0; }
ab05
相关文章推荐
- MySql 5.7:忘记root密码的登录方法
- 项目参数外部配置化
- xilinx sdk debug 无法进入main函数解决方法
- 微电影大赛二等奖
- 欢迎使用CSDN-markdown编辑器
- c++作业6
- leetcode 之 Permutation
- PAT (Advanced Level) 1050. String Subtraction (20)
- html滚动字幕代码(咋个办呢 zgbn )
- 谈Find指令
- LeetCode 345: Reverse Vowels of a String
- Http接口获取数据
- Java注解
- android列表收缩与展开仿QQ好友列表(非常详细,附源码)
- 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- Android中github上的开源工程
- Android基础知识之JVM && Dalvik && ART
- C# 加载xml文档文件及加载xml字符串
- PDF解析
- Xcode中常用英文