您的位置:首页 > 编程语言 > C语言/C++

递增有序的顺序表表示集合,求解两个集合的交集 并集 差集(c语言实现)

2016-09-26 20:02 1236 查看
#include<stdio.h>

#include<stdlib.h>

#define max 100

typedef struct {

    int elem[max];

    int length;

}List;

void UnionList();

void IntersectionList();

void setdifferenceList();

void DataSort(List &L, int n);

int main(){

    UnionList();

    IntersectionList();

    setdifferenceList();

    return 0;

}

//并集

void  UnionList() {

    int i, j, e;

    List La, Lb;

    printf("并集\n");

    printf("请输入集合A,集合B元素的个数:\n");

    scanf("%d %d", &La.length, &Lb.length);

    printf("请输入集合A的元素:\n");

    for (i = 0; i < La.length; i++){

        scanf("%d", &La.elem[i]);

    }

    printf("请输入集合B的元素:\n");

    for (i = 0; i < Lb.length; i++){

        scanf("%d", &Lb.elem[i]);

    }

    for (i = 0; i<Lb.length; i++)

    {

        e = Lb.elem[i];

        j = 0;

        while ((j<La.length) && (La.elem[j] != e))

            j++;

        if (j == La.length){

            La.elem[La.length] = e;

            La.length++;

        }

    }

    DataSort(La, La.length);

    for (i = 0; i<La.length; i++) {

        printf("%d ", La.elem[i]);

    }

    printf("\n");

}

//交集

void IntersectionList(){

    int i, j, d = 0;

    List La, Lb, Lc;

    printf("交集\n");

    printf("请输入集合A,集合B元素的个数:\n");

    scanf("%d %d", &La.length, &Lb.length);

    printf("请输入集合A的元素:\n");

    for (i = 0; i < La.length; i++){

        scanf("%d", &La.elem[i]);

    }

    printf("请输入集合B的元素:\n");

    for (i = 0; i < Lb.length; i++){

        scanf("%d", &Lb.elem[i]);

    }

    for (i = 0; i<La.length; i++) {

        for (j = 0; j<Lb.length; j++){

            if (La.elem[i] == Lb.elem[j]){

                Lc.elem[d++] = La.elem[i];

                break;

            }

        }

    }

    DataSort(Lc, d);

    for (i = 0; i<d; i++) {

        printf("%d ", Lc.elem[i]);

    }

    printf("\n");

}

//差集

void setdifferenceList() {

    int i, j, d = 0, c;

    List La, Lb, Lc;

    printf("差集\n");

    printf("请输入集合A,集合B元素的个数:\n");

    scanf("%d %d", &La.length, &Lb.length);

    printf("请输入集合A的元素:\n");

    for (i = 0; i < La.length; i++){

        scanf("%d", &La.elem[i]);

    }

    printf("请输入集合B的元素:\n");

    for (i = 0; i < Lb.length; i++){

        scanf("%d", &Lb.elem[i]);

    }

    for (i = 0; i<La.length; i++) {

        c = 0;

        for (j = 0; j<Lb.length; j++){

            if (La.elem[i] != Lb.elem[j]){

                c++;

            }

        }

        if (c == Lb.length)

            Lc.elem[d++] = La.elem[i];

    }

    DataSort(Lc, d);

    for (i = 0; i<d; i++) {

        printf("%d ", Lc.elem[i]);

    }

    printf("\n");

}

//排序

void DataSort(List &L, int n) {

    int i, j, temp;

    for (i = 0; i<n - 1; i++){

        for (j = i + 1; j<n; j++){

            if (L.elem[j]<L.elem[i]) {

                temp = L.elem[j];

                L.elem[j] = L.elem[i];

                L.elem[i] = temp;

            }

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 顺序表
相关文章推荐