一、前提条件
首先,要想通过C语言构思集合的想法必须先涉及数学中集合的基本概念,才能更好地掌握这篇博客文章,出于考虑大家对数学的困惑,以下我简要说明了数学中集合的基本概念。当然这不是集合的全部知识,为了方便博友阅读,我这里简单摘要了集合的基本知识,不含集合关系和运算等。
二、了解集合的基本概念与表达
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 。
三、利用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语言实现集合的基本操作。你可以根据需要扩展修改这个例子,以满足更复杂的集合操作,当然我是不会轻易让你知道更复杂和完美的方法。
除非
除非
除非?
向我请教,我一定会好好教你的,嘿嘿。