数据结构c语言求解有序集合的并集
时间: 2024-09-26 21:05:16 浏览: 34
在 C 语言中,如果你需要求解两个有序集合(例如整数数组表示的集合)的并集,可以使用一种称为“归并”(Merge)的方法。这通常涉及到两个步骤:
1. **合并过程**:创建一个新的空数组,用于存放结果,并遍历两个输入集合。比较当前元素,将较小的添加到结果数组并移动指针到下一个元素。当其中一个集合遍历完后,将另一个集合剩余的部分直接复制到结果数组。
2. **填充剩余部分**:如果第一个集合还有剩余元素,将其全部添加到结果数组。
下面是一个简单的示例函数来实现这个过程:
```c
#include <stdio.h>
void merge(int a[], int b[], int n1, int n2, int c[]) {
int i = 0, j = 0, k = 0;
while (i < n1 && j < n2) {
if (a[i] <= b[j]) {
c[k++] = a[i++];
} else {
c[k++] = b[j++];
}
}
/* Copy remaining elements of a[] if any */
while (i < n1) {
c[k++] = a[i++];
}
/* Copy remaining elements of b[] if any */
while (j < n2) {
c[k++] = b[j++];
}
}
void print_array(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int a[] = {1, 3, 5, 7};
int b[] = {2, 4, 6, 8, 9};
int n1 = sizeof(a) / sizeof(a[0]);
int n2 = sizeof(b) / sizeof(b[0]);
int result[n1 + n2];
merge(a, b, n1, n2, result);
printf("Union of the two sorted arrays is:\n");
print_array(result, n1 + n2);
return 0;
}
```
在这个例子中,`merge` 函数接受两个排序数组 `a` 和 `b` 的地址、它们各自的长度,以及结果数组 `c`。`main` 函数中展示了如何使用这个函数求并集。
阅读全文