c语言用顺序表两个集合的交集的代码
时间: 2024-10-19 07:13:27 浏览: 15
数据结构C语言版顺序表的集合运算
3星 · 编辑精心推荐
在C语言中,我们可以使用两个顺序表(数组或链表)来表示集合,并通过遍历和比较元素的方式来找出它们的交集。这里我们假设这两个顺序表已经排序过,因为未排序的列表交集计算需要额外的算法,如哈希等。
以下是一个简单的示例,展示了如何使用循环和临时数组来存储交集:
```c
#include <stdio.h>
// 结构体表示一个元素
typedef struct {
int value;
} Element;
// 函数用于查找两个有序数组的交集
void findIntersection(int* array1, int size1, int* array2, int size2, int* result, int capacity) {
int i = 0, j = 0, k = 0; // i 和 j 分别遍历两个输入数组,k 遍历结果数组
while (i < size1 && j < size2) {
if (array1[i] == array2[j]) { // 如果当前元素相等
if (k < capacity) { // 检查结果数组是否已满
result[k++] = array1[i]; // 若未满,将元素添加到结果数组
} else {
printf("Result array is full.\n");
break;
}
i++, j++; // 移动指针到下一个元素
} else if (array1[i] < array2[j]) { // 如果第一个元素较小
i++;
} else { // 第二个元素较小
j++;
}
}
printf("Intersection: ");
for (int l = 0; l < k; l++) {
printf("%d ", result[l]);
}
}
int main() {
int array1[] = {1, 2, 4, 5, 6};
int array2[] = {3, 4, 5, 7, 8};
int size1 = sizeof(array1) / sizeof(array1[0]);
int size2 = sizeof(array2) / sizeof(array2[0]);
// 假设有一个足够大的结果数组,大小为size1 + size2
int intersection[size1 + size2];
findIntersection(array1, size1, array2, size2, intersection, size1 + size2);
return 0;
}
```
这个程序会输出两个数组的交集:`4 5`。如果结果数组空间不足,则会输出提示信息并停止处理。
阅读全文