用c语言编写两个集合的运算

Python016

用c语言编写两个集合的运算,第1张

记得采纳哦

集合

#include "stdafx.h"

#include <stdio.h>

int fun(int a,int M[])//判断元素是否在集合里 在返回1 不在返回0

{

int i=0

for(i=0M[i]!=0i++)

if(a==M[i]) return 1

return 0

}

void get(int M[])//输入集合元素

{

int i=0

printf("\n")

do

{

scanf("%d",&M[i++])

}

while(M[i-1]!=0)

}

void print(int M[])//打印集合

{

int i=0

printf("\n")

while(M[i]!=0)

{

printf("%d ",M[i++])

}

printf("\n")

}

void clear(int M[])

{

int i=0

do

{

M[i++]=0

}

while(M[i]!=0)

}

void fun_sum(int A[],int B[],int C[])//集合A和集合B的并集

{

int i,j

for(i=0A[i]!=0i++)

{

C[i]=A[i]

}

for(j=0B[j]!=0j++)

{

if(!fun(B[j],C)) C[i++]=B[j]

}

}

void fun_sub(int A[],int B[],int C[])//集合A和集合B的差集

{

int i,j=0

for(i=0A[i]!=0i++)

{

if(!fun(A[i],B)) C[j++]=A[i]

}

}

void fun_J(int A[],int B[],int C[])//集合A和集合B的交集

{

int i,j=0

for(i=0A[i]!=0i++)

{

if(fun(A[i],B)) C[j++]=A[i]

}

}

int main(int argc, char* argv[])

{

int A[50]={0},B[50]={0},C[100]={0}

printf("请输入集合A以0结束\n")

get(A)

printf("请输入集合B以0结束\n")

get(B)

fun_sum(A,B,C)

printf("集合A与集合B的并:\n")

print(C)

clear(C)

fun_sub(A,B,C)

printf("集合A与集合B的差:\n")

print(C)

clear(C)

fun_J(A,B,C)

printf("集合A与集合B的交:\n")

print(C)

return 0

}

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

typedef struct set

{

    int *array

    int len

} Set

Set* new_set( int len )

{

    Set *s = (Set*)malloc( sizeof(struct set) )

    s->len = len

    s->array = (int*)malloc( sizeof(int)*len )

    memset( s->array, 0, sizeof(int)*len )

    return s

}

void delete_set( Set **s )

{

    free( (*s)->array )

    free( *s )

    *s = NULL

}

int is_belong_to_set( Set *a, int n )

{

    int i

    for( i=0 i<a->len i++ )

    {

        if ( n == a->array[i] )

            return 1

    }

    return 0

}

Set* set_diff( Set *a, Set *b )

{

    int i=0, clen = 0 

    Set* c = new_set( a->len )

    c->len = clen

    for( i=0 i<a->len i++ )

    {

        if( ! is_belong_to_set(b, a->array[i] ) )

        {

            c->array[clen] = a->array[i]

            clen ++

            c->len = clen

        }

    }

    return c

}

Set *set_union( Set *a, Set *b )

{

    int i, clen = 0

    Set *c = new_set( a->len + b->len )

    c->len = clen

    for( i=0 i<a->len || i<b->len i++ )

    {

        if ( i<a->len )

            if ( ! is_belong_to_set( c, a->array[i] ) )

            {

                c->array[clen] = a->array[i]

                clen ++

                c->len = clen

            }

        if ( i<b->len )

            if ( ! is_belong_to_set( c, b->array[i] ) )

            {

                c->array[clen] = b->array[i]

                clen++

                c->len = clen

            }

    }

    return c

}

void sort( Set *a )

{

    int i,j

    for( i=0 i<a->len i++ )

        for( j=i+1 j<a->len j++ )

            if ( a->array[i] > a->array[j] )

            {

                int t = a->array[i]

                a->array[i] = a->array[j]

                a->array[j] = t

            }

}

int main()

{

    int alen = 0, blen = 0 , i

    Set *a, *b, *c

    scanf( "%d", &alen )

    a = new_set( alen )

    for( i=0 i<alen i++ )

        scanf( "%d", &a->array[i] )

    scanf( "%d", &blen )

    b = new_set( blen )

    for( i=0 i<blen i++ )

        scanf( "%d", &b->array[i] )

    Set *s1 = set_diff( a, b )

    Set *s2 = set_diff( b, a )

    c = set_union( s1, s2 )

    sort( c )

    for( i=0 i<c->len i++ )

        printf( "%d ", c->array[i] )

    printf( "\n" )

    delete_set( &a )

    delete_set( &b )

    delete_set( &c )

    delete_set( &s1 )

    delete_set( &s2 )

}

/* diff.c:差运算 */

#include <stdio.h>

#include <stdlib.h>

int set_a[5] = {1, 3 ,5 ,9, 7} // 非 0 元素构成的集合

int set_b[5] = {1, 5, 2 ,8, 4}

int set_c[10] ={0}

int isin(int a_or_b, int elem)

{

    int *set_tmp

    int cnt

    switch(a_or_b) 

    {

        case 1:

            set_tmp = set_b

            break

        case 2:

            set_tmp = set_a

            break

        default:

            printf ( "parameter error!\n" )

    }

    for (cnt = 0 cnt < 5 cnt++) 

    {

        if(set_tmp[cnt] == elem)

        {

            return 1

        }

    }

    return 0

}

int main(int argc, char *argv[])

{

    int cnt, cnt2 = 0

    for (cnt = 0 cnt < 5 cnt++)

    {

        if(isin(1, set_a[cnt]) == 1) // 如果  集合 a 中的元素在集合 b 中

        {

            set_c[cnt2++] = set_a[cnt]

        }

    }

    printf ( "The result of diff: \n" )

    for(cnt = 0 set_c[cnt] != 0 cnt++) // 输出非 0 元素 

    {

        printf ( "%d\t", set_c[cnt] )

    }

    putchar('\n')

    return 0

}

亲是要这样做差运算吗?