阿Hun 2021-10-01 18:07 采纳率: 86.7%
浏览 725
已结题

C语言数据结构顺序表求交集并集


#include <stdio.h>
#include <malloc.h>
#define LISTSIZE 20

typedef struct {
    int * elem;
    int length;
    int ListSize;
}SqList;

int main() {
    SqList L1,L2,L3,L4; //L3做交集 L4做并集
    int i,j,a,b=0,k,q;
    L1.elem = (int*)malloc(LISTSIZE * sizeof(int));
    L1.ListSize = LISTSIZE;
    printf("输入表L1的数据个数以及数据:\n");
    scanf("%d",&L1.length);
    if (L1.length > LISTSIZE) {
        printf("输入的数据过多,请重新输入!\n");
        return 0;
    }
    for (i = 0; i < L1.length; i++) {
        scanf("%d",&L1.elem[i]);
    }
    printf("L1的数据是:\n");
    for (i = 0; i < L1.length; i++) {
        printf("%d.",L1.elem[i]);
    }

    printf("\n\n");

    L2.elem = (int*)malloc(LISTSIZE * sizeof(int));
    L2.ListSize = LISTSIZE;
    printf("输入表L2的数据个数以及数据:\n");
    scanf("%d", &L2.length);
    if (L2.length > LISTSIZE) {
        printf("输入的数据过多,请重新输入!\n");
        return 0;
    }
    for (i = 0; i < L2.length; i++) {
        scanf("%d", &L2.elem[i]);
    }
    printf("L2的数据是:\n");
    for (i = 0; i < L2.length; i++) {
        printf("%d.", L2.elem[i]);
    }
    
        
    if (L1.length > L2.length) {     //将两表中较短的表的长度记录,方便一会儿做交集的时候,短的走完就不往下走了

        a = L2.length;
    }
    else a = L1.length;

    printf("\n\n");


    L3.elem = (int*)malloc(LISTSIZE * sizeof(int));
    L3.ListSize = LISTSIZE;
    L3.length = a;

    for (i = 0; i < a; i++) {
        int n, m;
        n = L1.elem[i];
        for (j = 0; j < a;j++) {
            m = L2.elem[j];
            if (n == m) {
                L3.elem[i] = n;
                b++;                   //b代表L3的长度
            }
        }
    }

    printf("表L1与L2中共同的数据是:\n");
    for (i = 0; i < b; i++) {
        printf("%d.",L3.elem[i]);
    }

    printf("\n\n");

    L4.elem = (int*)malloc(LISTSIZE * sizeof(int));
    L4.ListSize = LISTSIZE;
    L4.length = L1.length + L2.length;           //先假定4的长度是1+2

    for (i = 0; i < L1.length; i++) {
        L4.elem[i] = L1.elem[i];                   //先把表1的数据放入表4
    }
    k = 0;
    for (i = 0; i < L1.length; i++) {                    //通过比较,把表2中表4没有的数据送入表4
        for (j = 0; j < L2.length; j++) {
            if (L1.elem[j] != L2.elem[i]) {
                k++;                                     //k做标志,满足条件代表一轮比完了    
                if (k == L2.length) {
                    L4.elem[L1.length + i] = L2.elem[i];
                    q = 1;                              //q是满足条件的个数          
                    q++;       

                }
            }
        }
    }

    L4.length = L4.length - q;               
    printf("表L1与表L2的并集是:\n");
    for (i = 0; i < L4.length; i++) {
        printf("%d.", L4.elem[i]);
    }

    return 0;
}

测试数据
L1:3,8,5,11
L2:22,6,8,3,15,11,20

结果 不报错,但数据有误

img

  • 写回答

2条回答 默认 最新

  • 英雄哪里出来 2021年博客之星Top1 2021-10-02 08:37
    关注

    求交 和 求并 的逻辑都有点问题,帮你改好了,主要看求交 (L3 相关逻辑)和 求并 (L4相关逻辑)即可,测试数据在文件结束。

    #include <stdio.h>
    #include <malloc.h>
    #define LISTSIZE 20
     
    typedef struct {
        int * elem;
        int length;
        int ListSize;
    }SqList;
     
    int main() {
        SqList L1,L2,L3,L4; //L3做交集 L4做并集
        int i,j;
        L1.elem = (int*)malloc(LISTSIZE * sizeof(int));
        L1.ListSize = LISTSIZE;
        printf("输入表L1的数据个数以及数据:\n");
        scanf("%d",&L1.length);
        if (L1.length > LISTSIZE) {
            printf("输入的数据过多,请重新输入!\n");
            return 0;
        }
        for (i = 0; i < L1.length; i++) {
            scanf("%d",&L1.elem[i]);
        }
        printf("L1的数据是:\n");
        for (i = 0; i < L1.length; i++) {
            printf("%d.",L1.elem[i]);
        }
     
        printf("\n\n");
     
        L2.elem = (int*)malloc(LISTSIZE * sizeof(int));
        L2.ListSize = LISTSIZE;
        printf("输入表L2的数据个数以及数据:\n");
        scanf("%d", &L2.length);
        if (L2.length > LISTSIZE) {
            printf("输入的数据过多,请重新输入!\n");
            return 0;
        }
        for (i = 0; i < L2.length; i++) {
            scanf("%d", &L2.elem[i]);
        }
        printf("L2的数据是:\n");
        for (i = 0; i < L2.length; i++) {
            printf("%d.", L2.elem[i]);
        }
        
     
        printf("\n\n");
     
     
        L3.elem = (int*)malloc(LISTSIZE * sizeof(int));
        L3.ListSize = LISTSIZE;
        L3.length = 0;
     
        for (i = 0; i < L1.length; i++) {
            int n, m;
            n = L1.elem[i];
            for (j = 0; j < L2.length;j++) {
                m = L2.elem[j];
                if (n == m) {
                    L3.elem[ L3.length++ ] = n;
                    break;
                }
            }
        }
     
        printf("表L1与L2中共同的数据是:\n");
        for (i = 0; i < L3.length; i++) {
            printf("%d.",L3.elem[i]);
        }
     
        printf("\n\n");
     
        L4.elem = (int*)malloc(LISTSIZE * sizeof(int));
        L4.ListSize = LISTSIZE;
        L4.length = L1.length + L2.length;           //先假定4的长度是1+2
     
        for (i = 0; i < L2.length; i++) {
            L4.elem[i] = L2.elem[i];                 
        }
        L4.length = L2.length;
        for (i = 0; i < L1.length; i++) {               
            for (j = 0; j < L2.length; j++) {
                if (L1.elem[i] == L2.elem[j]) {
                    break;
                }
            }   
             if (j == L2.length) {
                 L4.elem[ L4.length++ ] = L1.elem[i];       
             }
        }
                   
        printf("表L1与表L2的并集是:\n");
        for (i = 0; i < L4.length; i++) {
            printf("%d.", L4.elem[i]);
        }
     
        return 0;
    }
    
    /*
    4
    3 5 8 11
    
    7
    22 6 8 3 15 11 20
    */
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月10日
  • 已采纳回答 10月2日
  • 创建了问题 10月1日

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?