|
发表于 2024-1-25 09:51:38
|
显示全部楼层
在C语言中,可以使用自定义的数据结构和相关函数实现一个set集合。下面是一个简单示例:
- #include <stdio.h>
- #include <stdbool.h>
- // 定义set结构体
- typedef struct {
- int* elements; // 存储元素的数组指针
- int size; // 当前元素个数
- int capacity; // 容量,用于动态扩展数组
- } Set;
- // 初始化set集合
- void initSet(Set* set) {
- set->size = 0;
- set->capacity = 4; // 初始容量为4
- set->elements = malloc(set->capacity * sizeof(int));
- }
- // 向set集合中添加元素
- void addElement(Set* set, int element) {
- // 首先检查集合中是否已经存在该元素
- for (int i = 0; i < set->size; i++) {
- if (set->elements[i] == element) {
- printf("%d 已经存在于集合中\n", element);
- return;
- }
- }
-
- // 如果集合中不存在该元素,则将其添加到集合末尾
- if (set->size >= set->capacity) {
- // 如果集合已满,则动态扩展数组容量
- set->capacity *= 2;
- set->elements = realloc(set->elements, set->capacity * sizeof(int));
- }
-
- set->elements[set->size++] = element;
- printf("%d 添加到集合中\n", element);
- }
- // 从set集合中删除元素
- void removeElement(Set* set, int element) {
- bool found = false;
-
- for (int i = 0; i < set->size; i++) {
- if (set->elements[i] == element) {
- // 找到要删除的元素,将后面的元素往前移动
- for (int j = i; j < set->size - 1; j++) {
- set->elements[j] = set->elements[j + 1];
- }
-
- set->size--;
- found = true;
- printf("%d 从集合中删除\n", element);
- break;
- }
- }
-
- if (!found) {
- printf("%d 不存在于集合中\n", element);
- }
- }
- // 检查元素是否存在于set集合中
- bool containsElement(Set* set, int element) {
- for (int i = 0; i < set->size; i++) {
- if (set->elements[i] == element) {
- return true;
- }
- }
- return false;
- }
- // 遍历set集合中的元素
- void traverseSet(Set* set) {
- for (int i = 0; i < set->size; i++) {
- printf("%d ", set->elements[i]);
- }
- printf("\n");
- }
- // 测试示例
- int main() {
- Set mySet;
- initSet(&mySet);
-
- addElement(&mySet, 1);
- addElement(&mySet, 2);
- addElement(&mySet, 3);
- addElement(&mySet, 2); // 添加重复元素
-
- removeElement(&mySet, 2);
-
- printf("集合中元素个数: %d\n", mySet.size);
-
- if (containsElement(&mySet, 3)) {
- printf("3 存在于集合中\n");
- }
-
- traverseSet(&mySet);
-
- free(mySet.elements); // 释放内存
-
- return 0;
- }
复制代码
上述代码使用一个动态数组来存储set集合的元素,通过遍历数组来实现查找、删除和验证元素是否存在的功能。同时,还实现了动态扩展数组容量的功能,以适应添加元素时可能超出原始容量的情况。注意,为了使用动态内存管理函数 `malloc()` 和 `realloc()`,需要包含 `<stdlib.h>` 头文件。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|