封装函数:顺序表的集合交运算,用C语言写
时间: 2024-10-17 22:14:41 浏览: 32
封装函数:在C语言中,我们可以使用结构体来表示顺序表,并创建一个函数来进行集合的交运算。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建一个新的顺序表节点
Node* create_node(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 插入元素到列表
void insert(Node** head, int value) {
Node* newNode = create_node(value);
if (*head == NULL) {
*head = newNode;
} else {
Node* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
}
// 计算两个列表的交集
void intersection(Node* list1, Node* list2, Node** resultHead) {
Node* temp1 = list1, *temp2 = list2;
*resultHead = NULL; // 初始化结果头部
while (temp1 && temp2) {
if (temp1->data == temp2->data) {
if (*resultHead == NULL) {
*resultHead = temp1;
} else {
Node* newNode = create_node(temp1->data);
newNode->next = *resultHead;
*resultHead = newNode;
}
temp1 = temp1->next;
temp2 = temp2->next;
} else if (temp1->data < temp2->data) {
temp1 = temp1->next;
} else {
temp2 = temp2->next;
}
}
}
// 打印顺序表
void print_list(Node* head) {
Node* current = head;
while (current != NULL) {
printf("%d -> ", current->data);
current = current->next;
}
printf("NULL\n");
}
int main() {
Node* list1_head = NULL;
Node* list2_head = NULL;
// 初始化并插入元素到第一个列表
insert(&list1_head, 1);
insert(&list1_head, 2);
insert(&list1_head, 3);
insert(&list1_head, 4);
// 初始化并插入元素到第二个列表
insert(&list2_head, 2);
insert(&list2_head, 3);
insert(&list2_head, 5);
// 计算交集并打印结果
Node* intersect_head;
intersection(list1_head, list2_head, &intersect_head);
if (intersect_head) {
printf("Intersection: ");
print_list(intersect_head);
} else {
printf("No common elements.\n");
}
return 0;
}
```
这个程序首先定义了顺序表的节点结构以及相关的操作,然后通过`intersection`函数计算两个列表的交集。在这个例子中,交集将是[2, 3]。
阅读全文