在计算机科学中,集合的并集和交集运算是基本的数学操作,可以通过编程实现。以下是使用C语言实现集合的并集和交集运算的示例代码:
并集运算
并集运算意味着取两个集合中所有的元素,重复的元素只保留一次。
```c
include include // 定义单链表结构体 typedef struct ListNode { int data; struct ListNode *next; } ListNode; // 创建新节点的辅助函数 ListNode* createNode(int data) { ListNode* newNode = (ListNode*)malloc(sizeof(ListNode)); newNode->data = data; newNode->next = NULL; return newNode; } // 计算两个集合的并集 ListNode* unionSet(ListNode* A, ListNode* B) { ListNode* pa = A->next; ListNode* pb = B->next; ListNode* tail = NULL; while (pa && pb) { if (pa->data < pb->data) { tail = pa; pa = pa->next; } else if (pa->data > pb->data) { tail = pb; pb = pb->next; } else { // 如果元素相同,合并到结果链表 tail->next = pa->next; free(pa); pa = pb->next; pb = pb->next; } } // 将剩余元素添加到结果链表 while (pa) { tail = pa; pa = pa->next; } while (pb) { tail = pb; pb = pb->next; } tail->next = NULL; return A; } // 打印链表的辅助函数 void printList(ListNode* head) { ListNode* current = head; while (current) { printf("%d -> ", current->data); current = current->next; } printf("NULL\n"); } int main() { // 创建示例集合A和B ListNode* A = createNode(1); A->next = createNode(3); A->next->next = createNode(5); ListNode* B = createNode(2); B->next = createNode(4); B->next->next = createNode(5); // 计算并集 ListNode* C = unionSet(A, B); // 打印并集 printList(C); return 0; } ``` 交集运算 交集运算意味着取两个集合中共同的元素。