渔村暮火 发表于 2023-12-14 13:39:35

C语言实现set集合

功能:
1、存入的数据不会重复
2、知道set集合当前的数据个数
3、具有set集合增加、删除、查找、遍历

渔村暮火 发表于 2024-1-25 09:46:33

@FishC 如何实现上面的set集合

FishC 发表于 2024-1-25 09:47:30

渔村暮火 发表于 2024-01-25 09:46
@FishC 如何实现上面的set集合

要实现一个set集合,可以使用Python中的内置数据结构 set。set 是一个无序且不重复的集合。

首先,你可以使用以下代码来创建一个set集合:

my_set = set()

接下来,你可以使用add()方法向set集合中添加元素:

my_set.add(1)
my_set.add(2)
my_set.add(3)

现在,set集合已经包含了元素1、2和3。

如果你想查看set集合中的所有元素,可以使用for循环遍历集合:

for element in my_set:
    print(element)

此外,你还可以使用len()函数获取set集合的大小(即元素的数量):

print(len(my_set))

如果你想检查某个元素是否存在于set集合中,可以使用in关键字:

if 2 in my_set:
    print("2 存在于集合中")
else:
    print("2 不存在于集合中")

set集合还有许多其他有用的操作,例如删除元素、集合间的运算等。希望这些基本操作能够帮助到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

渔村暮火 发表于 2024-1-25 09:50:00

FishC 发表于 2024-1-25 09:47
要实现一个set集合,可以使用Python中的内置数据结构 set。set 是一个无序且不重复的集合。

首先, ...

用C语言实现set集合

FishC 发表于 2024-1-25 09:51:38

渔村暮火 发表于 2024-01-25 09:50
用C语言实现set集合

在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 == 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 = 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 == element) {
            // 找到要删除的元素,将后面的元素往前移动
            for (int j = i; j < set->size - 1; j++) {
                set->elements = set->elements;
            }
            
            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 == element) {
            return true;
      }
    }
    return false;
}

// 遍历set集合中的元素
void traverseSet(Set* set) {
    for (int i = 0; i < set->size; i++) {
      printf("%d ", set->elements);
    }
    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 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: C语言实现set集合