首先,将对2个链表进行排序,然后遍历2个链表,得到2个了表 的交集和并集。 下面是具体实现步骤: 用归并排序对第1个链表进行排序,这个操作的时间复杂度为O(mLogm). 用归并排序堆第2个链表进行排序,这个操作的时间复杂度为O(nLogn). 线性遍历2个有序的链表,得到2个链表的交集和并集。这个操作的时间复杂度为O(...
printf("A与B的交集:共%d个\n",k-1); for(i=1;i<k;i++){printf("%d ",c[i]);}printf("\n"); printf("A与B的并集:共%d个\n",x+y+k-3); for(i=1;i<x;i++){printf("%d ",aa[i]);} for(i=1;i<y;i++){printf("%d ",bb[i]);} for(i=1;i<k;i++){printf("%d...
} /* 交集 *//* A与B的交集(A∩B):既属于A又属于B的元素构成的集合 */int setIntersection (set A, set B, set *dest) {int i = 0, j = 0, k = 0;dest->length = 0;for (i=0; i<A.length; i++) { /* 外循环遍历A */for (j=0; j<B.length; j++) { /* ...
定义两个数组存放这两个集合,再定义一个数组存放它们的集合,用类似冒泡排序的算法,遍历数组1中的第一个元素和数组2中每一个元素,若有相同的,则把这个元素放入第三个数组,继续遍历,知道数组1遍历完所有元素,那数组3中的元素,即为两个数组(集合)的交集。
include <stdio.h>#include <malloc.h>typedef struct node {int num;struct node *next;}AGG;AGG *CreateList() { // 创建单循环链表,返回链表头AGG *head,*p;int i,n;printf("结点个数n = ");scanf("%d",&n);head = p = (AGG *)malloc(sizeof(AGG)); // 专用头结点head->...
把集合A,B的元素分别用数组存取,∩ for(i=0,k=0,i<A的长度,i++)for(j=0,j<B的长度,j++)if(A[i]==B[j]){C[k++]=A[i];再跳出j循环,回到i,反正不是break那个C存交} 同样∪用循环,首先把A中的全部放入D中,B中的元素如果C中有,不写入D中,没有写入D中,或者去看D...
//交集 for(i=0;i<256;i++)if(ch1[i]>0&&ch2[i]>0){ putchar(i);count++;} if(count==0)printf("NULL");putchar('\n');//并集 count=0;for(i=0;i<256;i++)if(ch1[i]>0&||ch2[i]>0){ putchar(i);count++;} if(count==0)printf("NULL");putchar('\n');
以前写过一个纯C的, 用的是数组,模拟C++ STL里面的set_intersection,set_union和set_difference的实现。 稍作了修改,添加了些注释,希望能帮到你。注意:必须先对输入集合排序;输出结果和C++ STL的测试结果吻合。include <stdio.h>#include <stdlib.h>#include <string.h>int set_intersection (...
集合:求A、B两个集合的交集、并集和补集的代码(C语言)测试 #include <stdio.h> #define N 100 main(){ int a[N],b[N],c[N],d[N]; int aa[N],bb[N]; int i,j,k=1; int x=1,y=1,z; int m,n; int flag; printf("please input Number of A:\n"); scanf("%d",&m); printf(...