检索:集合运算 C语言

Python011

检索:集合运算 C语言,第1张

#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 )

}

记得采纳哦

集合

#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

}