7-2 找出不是两个数组共有的元素C语言
时间: 2024-12-14 15:26:42 浏览: 3
数组应用举例求出十个数中的最大数-C语言数组教学
在C语言中,我们可以使用两个指针和循环来解决这个问题。这里假设我们有两个一维数组a[]和b[],以及它们的长度n和m。我们需要找出它们之间没有公共元素的部分。以下是一个简单的示例:
```c
#include <stdio.h>
void find_unique(int a[], int b[], int n, int m) {
int i = 0, j = 0;
// 已经遍历过的元素的集合
int visited[n + m];
memset(visited, -1, sizeof(visited)); // 初始化为-1表示未访问
while (i < n && j < m) {
// 检查当前a[i]是否已经在b[j:]中存在
if (visited[a[i]] == -1) {
printf("%d ", a[i]); // 输出非共同元素
visited[a[i]] = i; // 标记已经访问过a[i]
}
// 移动指针
i++;
if (visited[b[j]] != -1) { // 如果b[j]已访问过,跳过
j++;
continue;
}
// 同理,检查b[j]是否在a[i:]
if (visited[b[j]] == -1) {
printf("%d ", b[j]);
visited[b[j]] = j; // 标记已经访问过b[j]
}
j++; // 移动b[j]
}
// 输出剩余的数组元素
while (i < n) {
if (visited[a[i]] == -1) {
printf("%d ", a[i]);
}
i++;
}
while (j < m) {
if (visited[b[j]] == -1) {
printf("%d ", b[j]);
}
j++;
}
}
int main() {
int a[] = {7, 2};
int b[] = {4, 6, 8, 9};
int n = sizeof(a) / sizeof(a[0]);
int m = sizeof(b) / sizeof(b[0]);
find_unique(a, b, n, m);
return 0;
}
```
在这个例子中,我们会比较a[]和b[]中的元素,只有当元素不在另一个数组的后续部分中出现时,才会被视为非共有的。
阅读全文