集合的并,交,差以及它们的混合运算的算法(c语言)

Python015

集合的并,交,差以及它们的混合运算的算法(c语言),第1张

/* 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

}

亲是要这样做差运算吗?

#include<stdio.h>

#include<stdlib.h>

typedef struct pointer{

char dat

struct pointer *link

} pointer

void readdata(pointer *head)

{ //读集合

pointer *p

char tmp

printf("input data ('0' for end):")

scanf("%c",&tmp)

while(tmp!='0')

{

if((tmp<'a')||(tmp>'z'))

{

printf("输入错误!必须为小写字母!\n")

return

}

p=(pointer *)malloc(sizeof(struct pointer))

p->dat=tmp

p->link=head->link

head->link=p

scanf("%c",&tmp)

}

}

void disp(pointer *head)

{ //显示集合数据

pointer *p

p=head->link

while(p!=NULL)

{

printf("%c ",p->dat)

p=p->link

}

printf("\n")

}

void bing(pointer *head1,pointer *head2, pointer *head3)

{ //计算集合1与集合2的并

pointer *p1,*p2,*p3

p1=head1->link

while(p1!=NULL)

{

p3=(pointer *)malloc(sizeof(struct pointer))

p3->dat=p1->dat

p3->link=head3->link

head3->link=p3

p1=p1->link

}

p2=head2->link

while(p2!=NULL)

{

p1=head1->link

while((p1!=NULL)&&(p1->dat!=p2->dat))

p1=p1->link

if(p1==NULL)

{

p3=(pointer *)malloc(sizeof(struct pointer))

p3->dat=p2->dat

p3->link=head3->link

head3->link=p3

}

p2=p2->link

}

}

void jiao(pointer *head1,pointer *head2, pointer *head3)

{ //计算集合1与集合2的交

pointer *p1,*p2,*p3

p1=head1->link

while(p1!=NULL)

{

p2=head2->link

while((p2!=NULL)&&(p2->dat!=p1->dat))

p2=p2->link

if((p2!=NULL)&&(p2->dat=p1->dat))

{

p3=(pointer *)malloc(sizeof(struct pointer))

p3->dat=p1->dat

p3->link=head3->link

head3->link=p3

}

p1=p1->link

}

}

main()

{

pointer *head1,*head2,*head3

head1=(pointer *)malloc(sizeof(struct pointer))

head1->link=NULL

head2=(pointer *)malloc(sizeof(struct pointer))

head2->link=NULL

head3=(pointer *)malloc(sizeof(struct pointer))

head3->link=NULL

printf("输入集合1:\n")

readdata(head1)

getchar()

printf("输入集合2:\n")

readdata(head2)

printf("集合1为:\n")

disp(head1)

printf("集合2为:\n")

disp(head2)

printf("集合1与集合2的并为:\n")

bing(head1,head2,head3)

disp(head3)

head3->link=NULL

printf("集合1与集合2的交为:\n")

jiao(head1,head2,head3)

disp(head3)

}