位图
位图一般用来处理大量数据的问题,比如要在100亿个整数中,查找某个数是否存在。第一想到的是遍历的方法,但是遍历首先要往内存中去存储数据,要将100亿个整型直接存储到内存中是做不到的。这时就可以运用到位图。
什么是位图
位图就是创建一个整型A,用这个整型A的bit位去代替一个储存空间,我们都知道比特位只有0和1,如果为了查找数据是否存在,只有两种状态存在和不存在,可以用1和0去表示,比如整型数组:
int array[8] = {0,5,11,21,17,15,26,30};
array存储了8个整型,占用了32个字节。而如果用比特位的0代表没有数据,1代表数据已经存入,可以将所给数据的数值代表比特位的位置,依次将整型A的对应比特位置为1。
位图如何存储数据
以上面的整型数组为例。
位图的相关代码如下:
#define N 8
typedef int BM_TYPE;
typedef struct BitMap
{
unsigned int bit[N];
int size;
}BitMap,*pBitMap;
void InitBitMap(pBitMap BMap);
void InsertBitMap(pBitMap BMap, BM_TYPE d);
void DeleteBitMap(pBitMap BMap, BM_TYPE d);
BM_TYPE Fi