数据结构顺序表作业二
将A,B两集合的交集放到新集合中
本来也想用链表写,感觉都对,编译也通过,就是结果不对,肯定还是有问题,我再想想。
BUG:
- 这样直接写出数组长度太LOW了,但是我用sizeof(A)/sizeof(int);得出的不是7,而是30,我不理解
思路:
从A中的第一个元素和B中的第一个元素比较,如果相等,则为两集合的交集,放C中,A,B都向后移动一位;如果A[I]<B[j],则i+1,让后一位和B[j]比较,因为A,B都是从小到大的顺序,它小了,就找它下一位更大的数比较;A[I]>B[j]时也同理。
测试案例:
编译结果:
完整代码:
#include<stdio.h>
#define maxSize 30
void print(int data[],int n) {
printf("\n");
int i=0;
for(i; i<n; i++) {
printf("%d\t",data[i]);
}
printf("\n");
}
void merge(int A[],int lenA,int B[],int lenB,int C[],int *lenC) {
int i=0;
int j=0;
int q=0;
while(i<=lenA-1&&j<=lenB-1) {
if(B[j]>A[i]) {
i++; //让A的后一位和B[j]比较,因为A,B都是从小到大的顺序,它小了,就找它下一位更大的数比较
}
if(B[j]==A[i]) { //如果相等,则为两集合的交集,放C中,A,B都向后移动一位
C[q]=A[i];
i++;
j++;
q++;
}
if(B[j]<A[i]) { //同理
j++;
}
}
*lenC=q;
}
int main() {
int A[maxSize]= {1,3,4,5,8,9,10};
int lenA=7;
int B[maxSize]= {1,2,4,8,10,15};
int lenB=6;
int C[maxSize];
int lenC=0;
merge(A,lenA,B,lenB,C,&lenC);
print(C,lenC);
return 0;
}