位向量实现集合—王晓东数据结构

这篇博客介绍了如何使用位向量来实现数据结构中的集合操作,特别以王晓东数据结构中的内容为例。通过位向量,可以高效地表示和操作包含数千个元素的集合。文中详细阐述了位向量的存储方式,以及SetInit、SetAssign、SetInsert、SetDelete、SetMember、SetEqual、SetUnion、SetIntersection和SetDifference等集合基本运算的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

王晓东数据结构中集合一章,用位向量实现集合看的很懵记录一下。

N是一个不大的固定整数时,{1,2...N}是N的子集 假如N=10000,可以用数组A[N]来表示这个集合的存在,此时数组大小为A[N],如A[1]=1表示集合中第一个元素存在。

位向量顾名思义就是用位来存储元素。以书中unsigned short类型为例,下面用US表示。US占位2个字节,16位,那么一个US就可以表示16个数,那么这N个数只需要用N/16 个US类型数表示。此时A数组大小为A[N/16+1],

A[0]表示1-16个数(0-15)

A[1]表示2-32个数(16-31)

...

A[0]=13,可看成000000001011,A[0]的第一个位置、第二个位置、第四个位置的数存在,即0、2、4三个数存在。 

假如输入一个数30,首先先确定在数组哪个位置,30/16=1,此时应在数组A[1]里,计算在A[1]中的位置则只需要30%16+1=15,表示在第15个位置。

下面解析王晓东书中集合的实现方法:

集合的基本运算:

//并集运算:其运算结果为集合A和集合B的并集
Set SetUnion(Set A,Set B);

//交集运算:其运算结果为集合A和集合B的交集
Set SetIntersection(Set A,Set B);

//赋值运算:将集合B赋值给A
void SetAssign(Set A,Set B);

//判断运算:相等返回1 否则返回0
int SetEqual(Set A,Set B);

//成员运算:x与集合相同的类型,当x属于S时,返回1 否则返回0
int SetMember(int x,Set set);

//插入运算:将x与插入集合S,当x本身属于S时,不改变集合
void SetInsert(int x,Set s);

//删除运算:将集合S中的x元素删除,当x不属于S时,不改变集合
void SetDelete(int x,Set s );

Set集合定义:

typedef struct set
{
    int size;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值