假设以两个元素依次递增有序排序排列的线性表 A 和 B 分别表示两个集合(即同一表中的元素值各不相同),现要求另辟空间构成一个线性表 C,其元素为 A 和 B 中的元素的交集,且表 C 中的元素也依值递增有序排列。试对顺序表编写求 C 的算法。
输入格式
输入一共有 4 行,每两行描述一个线性表,第一行为线性表长度 ni(0≤ni<50),第二行为线性表的各元素 ai(0≤ai<200)。
输出格式
输出一共有两行,第一行为线性表 C 的元素个数。第二行为线性表 C 的元素顺序输出的结果,按从小到大的顺序输出,每两个整数之间一个空格,最后一个整数后面没有空格。
#include <stdio.h>
typedef struct Vector{
int size, length;
int *data;
}Vector;
Vector init(Vector *vector, int size) {
vector->size = size;
vector->length = 0;
vector->data = (int *)malloc(sizeof(int) * size);
}
void intersect(Vector *A, Vector *B) {
int count = 0;
int k = 0;
Vector *C = (Vector *)malloc(sizeof(Vector));
for(int i = 0,j = 0; i < A->size; ) {
if(A->data[i] == B->data[j]) {
count++;
C->data[k++] = A->data[i];
i++;
j++;
}
if(A->data[i] < B->data[j]) {
i++;
}
if(A->data[i] > B->data[j]) {
j++;
}
}
printf("%d\n",count);
for(int i = 0; i < count; i++) {
if(i != 0) {
printf(" ");
}
printf("%d",C->data[i]);
}
}
void main(){
int m,a;
Vector *A = (Vector *)malloc(sizeof(Vector));
Vector *B = (Vector *)malloc(sizeof(Vector));
scanf("%d",&m);
init(A,m);
for(int i = 0; i < m; i++) {
scanf("%d ",&A->data[i]);
// printf("%d ",A->data[i]);
}
scanf("%d",&m);
init(B,m);
for(int i = 0; i < m; i++) {
scanf("%d ",&B->data[i]);
// printf("%d ",B->data[i]);
}
intersect(A,B);
return 0;
}