【C语言】利用struct结构体实现集合基本框架【第一期】

2 篇文章 0 订阅
2 篇文章 0 订阅

一、前提条件

  首先,要想通过C语言构思集合的想法必须先涉及数学中集合的基本概念,才能更好地掌握这篇博客文章,出于考虑大家对数学的困惑,以下我简要说明了数学中集合的基本概念。当然这不是集合的全部知识,为了方便博友阅读,我这里简单摘要了集合的基本知识,不含集合关系和运算等。

d5ae611469dd4724b5f33c94c6524866.jpeg

 

二、了解集合的基本概念与表达

1.集合的定义

  一般地,我们会把所需要研究对象统称为元素,把一些元素组成的总体叫做集合。

2.集合特性

  集合三个特性:确定性,互异性,无序性

3.集合分类

  1.有限集:含有限个元素的集合。

  2.无限集:含无限个元素的集合。

  3.空集:不含任何元素的集合,记作∅。

4.集合的表达方法

  通常数学中用大写的阿拉伯数字A,B,C,...来表达集合,如A = {1,2,3,4,5,6};用小写的字母或数字a,b,c,1,2,3,...表达集合中的某个元素,如A = {a,b,c,1,23,d}。

  四个表达方法:

1.自然语言法 :用自然语言表达。

2.列举法:把集合中的元素列举出来。

3.描述法:把元素中的公共属性描述出来,如{ | x | x < 10,x ∈ R}。

4.图示法: 用数轴或韦恩图表示集合。

  之后我会用该三种方法表达C语言的struct结构体的集合,以便于更清晰地了解这个流程。

5.元素与集合的关系

元素与集合是属于或不属于的关系。如元素 a 在集合 M 中,可以记作∈ M 。​​​​​​

661a6e1e8d064431841786a4c9ba458d.png

三、利用struct结构体实现集合

  哈哈,现在已经正式进入话题了,利用struct结构体实现集合并不难,主要的是你头脑清晰一点,就能理解这些代码的含义,废话不多说,开始吧。

  当你使用C语言时,你可以使用数组来表示集合,并使用循环来遍历数组中的元素。

我们可以用struct结构体来搭建一个集合。 如 elements = {100}。

#include <stdio.h>
#define MAX_SIZE 100

struct Set {
    int elements[MAX_SIZE];
    int size;
}

这里你可以初始化集合为空集如  elements =  ∅。

//初始化为空集
void initSet(struct Set*set) {
    set-> size = 0;
}

 

然后写上编程五件套增,添,删,改,查。

向集合添加元素。

//向集合添加元素
void addElement(struct Set *set,int element)  {
    if(set -> size < MAX_SIZE) {
    set -> elements[set -> size] =element;
    set -> size++;
  }
}

向集合删除元素。

void removeElement(struct Set *set, int element)
{
    int index = -1; // 索引位置
    for (int i = 0; i < set->size; i++)
    {
        if (set->elements[i] == element)
        {
            index = i; // 记住索引位置
            break;
        }
    }
    // 删除元素

    if (index != -1)
    {
        // 后面元素先前移动
        for (int i = index; i < set->size - 1; i++)
        {
            set->elements[i] = set->elements[i + 1];
        }
        set->size--; // 更新集合大小
    }
}

向集合检查元素

// 检查是否包含元素.
    int containsElement(struct Set * set, int element)
    {
        for (int i = 0; i < set->size; i++)
        {
            if (set->elements[i] == element)
            {
                return 1; // 包含
            }
        }
        return 0; // 不包含
    }

向集合打印元素,别问为什么不是改。

//打印元素
void printSet(struct Set * set)
    {
        printf("Set elements: ");
        for (int i = 0; i < set->size; i++)
        {
            printf("%d ", set->elements[i]);
        }
        printf("\n");
    }

然后,试试效果

int main() {
    // 假设你的集合,可以不写。
    struct Set mySet = {
        {1, 20, 3, 4, 5, 6}, 5};

    //这里可以初始化集合,这里按情况设置。
    // initSet(&mySet);

    int a = containsElement(&mySet, 20);
    int b = containsElement(&mySet, 40);

    //增加元素
    addElement(&mySet,10);
    //删除元素
    removeElement(&mySet,20);
    //打印元素
    printSet(&mySet):

    //如果存在包含关系则return 1,否则return 0。
    //这里你也可以写个判断语句来说明。
    printf("Is it Contains 20? :> %d\n", a);
    printf("Is it Contains 40? :> %d\n", b);

    return 0;
}

  在上面这个例子中,简单定义了一个Set结构体,它包含一个整数数组来存储集合的元素,以及一个整数变量来记录集合的大小。并可以通过初始化函数initSet,以便于我们可以创建一个空的集合,addElement函数用于向集合中添加元素,removeElement函数用于向集合删除元素,containsElement函数用于检查集合是否包含某个元素,printSet函数用于打印集合中的所有元素。

  同样,在main函数入口,我们首先创建一个Set类型的变量mySet,然后通过调用addElement函数,removeElement函数和containsElement函数向集合修改一些元素,最后打印集合元素。

  这只是一个简单的例子,展示如何适用C语言实现集合的基本操作。你可以根据需要扩展修改这个例子,以满足更复杂的集合操作,当然我是不会轻易让你知道更复杂和完美的方法。

 

 

除非

 

 

除非

 

 

 

除非?

24349730374143869b96cc94ad697dc9.png

 向我请教,我一定会好好教你的,嘿嘿。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值