c语言写交集的函数,怎样用c语言写"求集合的交集,并集,补集”这个程序?

#include"stdio.h"

main()

{ int *p,a[3][3],i,j;

p=&a[0][0];//此处类型不一致

printf("9ge shu : \n");

for(i=0;i<3;i++)

for(j=0;j<3;j++)

scanf("%d",(p+3*i+j));//scanf里面不要有空格,根据上面的该法,p代表a[0][0]的地址,此处(p+3*i+j)就是地址了,不用*

for(i=0;i<3;i++)

for(j=0;j<3;j++)

printf("%d ",*(p+3*i+j));

}

#include"stdio.h"

main()

{ int *p,a[3][3],i,j;

//p=a;

printf("9 ge shu : \n");

for(i=0;i<3;i++)

for(j=0;j<3;j++)

scanf("%d",*(a+i)+j);//如果非要用*(a+i)+j)这种格式,此处不能用p要用a,表示二维数组第一行的首地址

for(i=0;i<3;i++)

for(j=0;j<3;j++)

printf("%d ",*(*(a+i)+j));

}

//注:用int (*p)[3];即定义一个指向一个有三个元素的一维数组的指针也能实现,*(p+i)+j)这种格式,此时三维数组可以看成三个一位数组

#include"stdio.h"

main()

{ int (*p)[3],a[3][3],i,j;

p=a;

printf("9 ge shu : \n");

for(i=0;i<3;i++)

for(j=0;j<3;j++)

scanf("%d",*(a+i)+j);

for(i=0;i<3;i++)

for(j=0;j<3;j++)

printf("%d ",*(*(a+i)+j));

}

以下是一个用链表和 C 语言实现计算集合交集并集、差集和补集的代码: ```c #include <stdio.h> #include <stdlib.h> // 定义链表结点 typedef struct Node { int value; struct Node *next; } Node; // 定义链表头结点 typedef struct { Node *head; Node *tail; } List; // 初始化链表 void initList(List *list) { list->head = NULL; list->tail = NULL; } // 在链表尾部插入一个新结点 void insert(List *list, int value) { Node *newNode = (Node *) malloc(sizeof(Node)); newNode->value = value; newNode->next = NULL; if (list->head == NULL) { list->head = newNode; } else { list->tail->next = newNode; } list->tail = newNode; } // 判断链表中是否存在某个元素 int find(List *list, int value) { Node *p = list->head; while (p != NULL) { if (p->value == value) { return 1; } p = p->next; } return 0; } // 链表的交集运算 List intersection(List *list1, List *list2) { List result; initList(&result); Node *p1 = list1->head; while (p1 != NULL) { if (find(list2, p1->value)) { insert(&result, p1->value); } p1 = p1->next; } return result; } // 链表的并集运算 List unionSet(List *list1, List *list2) { List result; initList(&result); Node *p1 = list1->head; while (p1 != NULL) { insert(&result, p1->value); p1 = p1->next; } Node *p2 = list2->head; while (p2 != NULL) { if (!find(&result, p2->value)) { insert(&result, p2->value); } p2 = p2->next; } return result; } // 链表的差集运算 List difference(List *list1, List *list2) { List result; initList(&result); Node *p1 = list1->head; while (p1 != NULL) { if (!find(list2, p1->value)) { insert(&result, p1->value); } p1 = p1->next; } return result; } // 链表的补集运算 List complement(List *list1, List *list2) { List result; initList(&result); Node *p1 = list1->head; while (p1 != NULL) { if (!find(list2, p1->value)) { insert(&result, p1->value); } p1 = p1->next; } Node *p2 = list2->head; while (p2 != NULL) { if (!find(list1, p2->value)) { insert(&result, p2->value); } p2 = p2->next; } return result; } // 打印链表中的元素 void printList(List *list) { Node *p = list->head; while (p != NULL) { printf("%d ", p->value); p = p->next; } printf("\n"); } int main() { List list1, list2; initList(&list1); initList(&list2); insert(&list1, 1); insert(&list1, 2); insert(&list1, 3); insert(&list2, 2); insert(&list2, 3); insert(&list2, 4); printf("List 1: "); printList(&list1); printf("List 2: "); printList(&list2); printf("Intersection: "); List result1 = intersection(&list1, &list2); printList(&result1); printf("Union: "); List result2 = unionSet(&list1, &list2); printList(&result2); printf("Difference (list1 - list2): "); List result3 = difference(&list1, &list2); printList(&result3); printf("Complement: "); List result4 = complement(&list1, &list2); printList(&result4); return 0; } ``` 在上述代码中,我们定义了链表结点类型 `Node` 和链表类型 `List`,其中 `List` 包含链表头结点和尾结点。我们使用 `initList` 函数初始化链表,使用 `insert` 函数在链表尾部插入一个新结点。`find` 函数用于判断链表中是否存在某个元素。 我们实现了四个函数:`intersection`、`unionSet`、`difference` 和 `complement`,分别用于计算集合交集并集、差集和补集。这些函数都返回一个链表类型的结果。最后,我们使用 `printList` 函数打印链表中的元素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值