帮我写一个C语言实现python里面的set功能
时间: 2024-05-09 08:18:15 浏览: 104
使用C语言实现
好的,我可以帮您写一个C语言实现Python中的set功能。以下是一个简单的实现:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct set_node {
int value;
struct set_node *next;
} SetNode;
typedef struct {
SetNode *head;
SetNode *tail;
int size;
} Set;
// 初始化集合
void init_set(Set *set) {
set->head = NULL;
set->tail = NULL;
set->size = 0;
}
// 判断集合中是否存在某个元素
int contains(Set *set, int value) {
SetNode *node = set->head;
while (node != NULL) {
if (node->value == value) {
return 1; // 存在
}
node = node->next;
}
return 0; // 不存在
}
// 向集合中添加一个元素
void add(Set *set, int value) {
if (contains(set, value)) {
return; // 如果已经存在该元素,则不添加
}
SetNode *node = (SetNode *)malloc(sizeof(SetNode *));
node->value = value;
node->next = NULL;
if (set->size == 0) {
set->head = node;
set->tail = node;
} else {
set->tail->next = node;
set->tail = node;
}
set->size++;
}
// 从集合中删除一个元素
void remove(Set *set, int value) {
SetNode *node = set->head;
SetNode *prev = NULL;
while (node != NULL) {
if (node->value == value) {
if (prev == NULL) {
set->head = node->next;
} else {
prev->next = node->next;
}
if (set->tail == node) {
set->tail = prev;
}
free(node);
set->size--;
return;
}
prev = node;
node = node->next;
}
}
// 清空集合
void clear(Set *set) {
SetNode *node = set->head;
while (node != NULL) {
SetNode *next = node->next;
free(node);
node = next;
}
set->head = NULL;
set->tail = NULL;
set->size = 0;
}
int main() {
Set set;
init_set(&set);
add(&set, 1);
add(&set, 2);
add(&set, 3);
printf("Set contains 2: %d\n", contains(&set, 2)); // 1
printf("Set contains 4: %d\n", contains(&set, 4)); // 0
remove(&set, 2);
printf("Set contains 2: %d\n", contains(&set, 2)); // 0
clear(&set);
return 0;
}
```
这个代码实现了一个简单的集合(set)数据结构,它包含添加元素、删除元素、判断元素是否存在以及清空集合等功能。您可以根据自己的需要进行修改和扩展。
阅读全文