【C语言】顺序表并集与归并

来源:互联网 发布:matlab 2017b mac 编辑:程序博客网 时间:2024/05/01 22:17

顺序表交集与归并

测试用例:
a[] = {3, 5, 6, 11};
b[] = {2, 6, 8, 9, 11, 15, 20};
输出结果为两个数组LA与LC,其中LA表示a[]b[]的并集,LC表示a[]b[] 的归并。

#include "stdio.h"#include "stdlib.h"#include "malloc.h"#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define MAXLISTSIZE 20#define MAXLISTNUMBER 20typedef int Status;typedef int ElemType;typedef struct {    int data[MAXLISTSIZE];    int length;}List;List La,Lb,Lc;List CreateList(int temp[], List La, int n);void Union(List La, List Lb);int IsEqual(int a, int b);List UnionND(List La, List Lb);void BucketSort(List L);int main(){    int temp_a[] = {3,5,8,11};    int temp_b[] = {2,6,8,9,11,15,20};    La = CreateList(temp_a, La, sizeof(temp_a)/sizeof(int));    Lb = CreateList(temp_b, Lb, sizeof(temp_b)/sizeof(int));    Union(La, Lb);    Lc = UnionND(La, Lb);    BucketSort(Lc);    return 0;}List CreateList(int temp[], List La, int n){    for(int i = 0; i < n; i++){        La.data[i] = temp[i];        La.length = i+1;    }    return La;}void Union(List La, List Lb){    int flag = 0;    for(int i = 0; i < Lb.length; i++){        for(int j = 0; j < La.length; j++){            if(IsEqual(Lb.data[i], La.data[j]))                flag = 1;        }        if(!flag){            La.data[La.length++] = Lb.data[i];        }        flag = 0;    }    printf("LA = (");    for(int k = 0; k < La.length; k++)printf("%d  ",La.data[k]);    printf(")");    printf("\n");}int IsEqual(int a, int b){    if(a == b)return 1;    else return 0;}List UnionND(List La, List Lb){    for(int i = 0; i < Lb.length; i++){        La.data[La.length++] = Lb.data[i];    }    return La;}void BucketSort(List L){    int Bucket[MAXLISTNUMBER+1];    for(int i = 0; i < MAXLISTNUMBER+1; i++)        Bucket[i] = 0;    for(int j = 0; j < L.length; j++)        Bucket[L.data[j]]++;    printf("LC = (");    for(int k = 0; k < MAXLISTNUMBER+1; k++)        for(; Bucket[k] > 0; Bucket[k]--)            printf("%d  ",k);    printf(")");}

实验截图如下
这里写图片描述

2 0