一维数组4-2 找出不是两个数组共有的元素,c语言
时间: 2024-12-10 11:56:16 浏览: 51
在C语言中,找出两个一维数组中不共有的元素通常涉及到遍历和比较操作。假设我们有两个一维整型数组`arr1`和`arr2`,长度分别为`n1`和`n2`,以下是步骤:
```c
#include <stdio.h>
#include <stdlib.h>
// 函数声明
void find_unique(int *arr1, int n1, int *arr2, int n2);
int main() {
int arr1[] = {1, 2, 3, 4, 5};
int n1 = sizeof(arr1) / sizeof(arr1[0]);
int arr2[] = {4, 5, 6, 7};
int n2 = sizeof(arr2) / sizeof(arr2[0]);
// 创建临时数组存放不共有的元素
int unique[4 * (n1 + n2)]; // 假设最大不共有8个元素
int unique_count = 0;
// 寻找不共有的元素
find_unique(arr1, n1, arr2, n2, unique, &unique_count);
// 输出结果
printf("不共有的元素有:");
for (int i = 0; i < unique_count; i++) {
printf("%d ", unique[i]);
}
return 0;
}
// 查找并添加不共有的元素到临时数组
void find_unique(int *array1, int len1, int *array2, int len2, int *result, int *count) {
for (int i = 0; i < len1; i++) {
if (binary_search(array2, len2, array1[i]) == -1) {
result[*count++] = array1[i];
}
}
for (int j = 0; j < len2; j++) {
if (binary_search(array1, len1, array2[j]) == -1) {
result[*count++] = array2[j];
}
}
}
// 二分查找函数,查找arr中是否存在val
int binary_search(int *arr, int n, int val) {
int low = 0, high = n - 1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] == val)
return mid;
else if (arr[mid] < val)
low = mid + 1;
else
high = mid - 1;
}
return -1; // 如果值不存在于数组,则返回-1
}
```
在这个示例中,我们首先创建了一个临时数组`unique`存储不共有的元素。然后通过`find_unique`函数,我们分别检查每个数组中的元素是否存在于另一个数组中,若不存在则添加到`unique`数组。最后,遍历`unique`数组并输出结果。
阅读全文