用一张图来说明(A-B)∪(B-A)

换句话说:就是把两个集合重叠在一起,但是没有重复元素
题目:在终端输入集合元素,先建立表示集合A的静态链表S,然后输入集合B的元素,同时查找S表。若存在和B相同的元素,则从S表中删除,否则将此元素插入S中。
之前把静态链表的代码做成一个动态库,直接拿来用即可,不会做动态库与静态库或者不会写静态链表的同学可以直接去查看我的Linux动态库与静态库制作的文章
下面直接上代码main.c
- 1 #include
- 2 #include
- 3 #include
- 4
- 5
- 6
- 7 int main()
- 8 {
- 9 //创建一张A表的静态表
- 10 t_node *p_head = create_list();
- 11 //输入A表与B表的个数
- 12 int a_num,b_num;
- 13 scanf("%d %d",&a_num,&b_num);
- 14 //向A表中插入一个数据
- 15 //循环输入插入
- 16 int i = 0;
- 17 elem_type value;
- 18 while(i < a_num) {
- 19 scanf("%d",&value);
- 20 //把这个值插入到链表中去
- 21 insert_elem(p_head,value,get_len(p_head));
- 22 i++;
- 23 }
- 24 //然后来输入b表中的数据,同时插入到A表里面
- 25 //如果有相同的数据存在就不进行插入
- 26 int j = 0;
- 27 while(j < b_num) {
- 28 scanf("%d",&value);
- 29 //每一个数据的插入与A表进行判断
- 30 //先来遍历A表
- 31 int cur_index = p_head->head.next;//这个也就是一个数据
- 32 int flag = 1;//默然情况下是可以插入的
- 33 while(cur_index != -2) {
- 34 if(p_head->nodes[cur_index].data == value) {
- 35 flag = 0;//一旦相同的数据存在,就不插入
- 36 }
- 37 cur_index = p_head->nodes[cur_index].next;
- 38 }
- 39 if(flag) {
- 40 insert_elem(p_head,value,get_len(p_head));
- 41 }
- 42 j++;
- 43 }
- 44 //最后来遍历一下A表
- 45 for(int n = 0;n < get_len(p_head);n++) {
- 46 node res = get_elem_by_pos(p_head,n);
- 47 printf("%d ",res.data);
- 48 }
- 59 return 0;
- 50 }
运行结果:
