鱼C论坛

 找回密码
 立即注册
查看: 521|回复: 4

C语言实现set集合

[复制链接]
发表于 2023-12-14 13:39:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
功能:
1、存入的数据不会重复
2、知道set集合当前的数据个数
3、具有set集合增加、删除、查找、遍历
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-1-25 09:46:33 | 显示全部楼层
@FishC 如何实现上面的set集合
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-25 09:47:30 | 显示全部楼层
渔村暮火 发表于 2024-01-25 09:46
@FishC 如何实现上面的set集合


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

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

  1. my_set = set()
复制代码


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

  1. my_set.add(1)
  2. my_set.add(2)
  3. my_set.add(3)
复制代码


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

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

  1. for element in my_set:
  2.     print(element)
复制代码


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

  1. print(len(my_set))
复制代码


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

  1. if 2 in my_set:
  2.     print("2 存在于集合中")
  3. else:
  4.     print("2 不存在于集合中")
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

首先, ...

用C语言实现set集合
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-25 09:51:38 | 显示全部楼层
渔村暮火 发表于 2024-01-25 09:50
用C语言实现set集合


在C语言中,可以使用自定义的数据结构和相关函数实现一个set集合。下面是一个简单示例:

  1. #include <stdio.h>
  2. #include <stdbool.h>

  3. // 定义set结构体
  4. typedef struct {
  5.     int* elements;  // 存储元素的数组指针
  6.     int size;       // 当前元素个数
  7.     int capacity;   // 容量,用于动态扩展数组
  8. } Set;

  9. // 初始化set集合
  10. void initSet(Set* set) {
  11.     set->size = 0;
  12.     set->capacity = 4;  // 初始容量为4
  13.     set->elements = malloc(set->capacity * sizeof(int));
  14. }

  15. // 向set集合中添加元素
  16. void addElement(Set* set, int element) {
  17.     // 首先检查集合中是否已经存在该元素
  18.     for (int i = 0; i < set->size; i++) {
  19.         if (set->elements[i] == element) {
  20.             printf("%d 已经存在于集合中\n", element);
  21.             return;
  22.         }
  23.     }
  24.    
  25.     // 如果集合中不存在该元素,则将其添加到集合末尾
  26.     if (set->size >= set->capacity) {
  27.         // 如果集合已满,则动态扩展数组容量
  28.         set->capacity *= 2;
  29.         set->elements = realloc(set->elements, set->capacity * sizeof(int));
  30.     }
  31.    
  32.     set->elements[set->size++] = element;
  33.     printf("%d 添加到集合中\n", element);
  34. }

  35. // 从set集合中删除元素
  36. void removeElement(Set* set, int element) {
  37.     bool found = false;
  38.    
  39.     for (int i = 0; i < set->size; i++) {
  40.         if (set->elements[i] == element) {
  41.             // 找到要删除的元素,将后面的元素往前移动
  42.             for (int j = i; j < set->size - 1; j++) {
  43.                 set->elements[j] = set->elements[j + 1];
  44.             }
  45.             
  46.             set->size--;
  47.             found = true;
  48.             printf("%d 从集合中删除\n", element);
  49.             break;
  50.         }
  51.     }
  52.    
  53.     if (!found) {
  54.         printf("%d 不存在于集合中\n", element);
  55.     }
  56. }

  57. // 检查元素是否存在于set集合中
  58. bool containsElement(Set* set, int element) {
  59.     for (int i = 0; i < set->size; i++) {
  60.         if (set->elements[i] == element) {
  61.             return true;
  62.         }
  63.     }
  64.     return false;
  65. }

  66. // 遍历set集合中的元素
  67. void traverseSet(Set* set) {
  68.     for (int i = 0; i < set->size; i++) {
  69.         printf("%d ", set->elements[i]);
  70.     }
  71.     printf("\n");
  72. }

  73. // 测试示例
  74. int main() {
  75.     Set mySet;
  76.     initSet(&mySet);
  77.    
  78.     addElement(&mySet, 1);
  79.     addElement(&mySet, 2);
  80.     addElement(&mySet, 3);
  81.     addElement(&mySet, 2);  // 添加重复元素
  82.    
  83.     removeElement(&mySet, 2);
  84.    
  85.     printf("集合中元素个数: %d\n", mySet.size);
  86.    
  87.     if (containsElement(&mySet, 3)) {
  88.         printf("3 存在于集合中\n");
  89.     }
  90.    
  91.     traverseSet(&mySet);
  92.    
  93.     free(mySet.elements);  // 释放内存
  94.    
  95.     return 0;
  96. }
复制代码


上述代码使用一个动态数组来存储set集合的元素,通过遍历数组来实现查找、删除和验证元素是否存在的功能。同时,还实现了动态扩展数组容量的功能,以适应添加元素时可能超出原始容量的情况。注意,为了使用动态内存管理函数 `malloc()` 和 `realloc()`,需要包含 `<stdlib.h>` 头文件。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 12:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表