本篇文章给大家谈谈集合运算器c语言,以及集合运算程序对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、C语言求集合运算2、检索:集合运算 C语言3、用c语言编写两个集合的运算4、C语言 集合运算
C语言求集合运算
可以用线性表模拟集合,把两个线性表中一样的数提取出来就是交集,所有元素组成的就是并集,还可以用C++重载运算符实现+就求并集之类的。
检索:集合运算 C语言
#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; ia-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; ia-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; ia-len || ib-len; i++ )
{
if ( ia-len )
if ( ! is_belong_to_set( c, a-array[i] ) )
{
c-array[clen] = a-array[i];
clen ++;
c-len = clen;
}
if ( ib-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; ia-len; i++ )
for( j=i+1; ja-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; ialen; i++ )
scanf( “%d”, a-array[i] );
scanf( “%d”, blen );
b = new_set( blen );
for( i=0; iblen; 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; ic-len; i++ )
printf( “%d “, c-array[i] );
printf( “\n” );
delete_set( a );
delete_set( b );
delete_set( c );
delete_set( s1 );
delete_set( s2 );
}
用c语言编写两个集合的运算
记得采纳哦
集合
#include “stdafx.h”
#include stdio.h
int fun(int a,int M[])//判断元素是否在集合里 在返回1 不在返回0
{
int i=0;
for(i=0;M[i]!=0;i++)
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=0;A[i]!=0;i++)
{
C[i]=A[i];
}
for(j=0;B[j]!=0;j++)
{
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=0;A[i]!=0;i++)
{
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=0;A[i]!=0;i++)
{
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;
}
C语言 集合运算
Deletetable函数有两个地方把pcollelm写成了collelm
Addition函数体第4行没加分号
Addition函数中3次调用AppendToTable时都写了3个参数,但AppendToTable只声明了2个参数
Multiply的返回类型写了collelm,应该是pcollelm
Multiply的函数参数是x,y,但函数体里面写的是a,b
Multiply里调用AppendToTable时,p的前面不用写类型
main的第3行,p=collp;改成p=collp;
main里面case 2调用Deletetable时,第一个参数是Collelm类型的colla,但Deletetable对应的参数类型是Collelm *
关于集合运算器c语言和集合运算程序的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。