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