有序集合的交运算

假设以两个元素依次递增有序排序排列的线性表 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;
}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yitahutu79

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值