C语言实现的bitmap位图代码分享

 更新时间:2014年08月28日 10:09:32   投稿:junjie  
这篇文章主要介绍了C语言实现的bitmap位图代码分享,位图(bitmap)是一种非常常用的结构,在索引、数据压缩等方面有广泛应用,需要的朋友可以参考下

事实上,我们是用每一个 元素表示一个32位的二进制字符串,这样这个元素可以保留相邻32个号码是否存在的信息,数组范围就下降到10000000/32了.例如对于号码 89256,由于89256 mod 32=2789…8,这样我们应该置a[2789]中32位字符串的第8位(从低位数起)为1.

#define WORD 32
#define SHIFT 5 ////移动5个位,左移则相当于乘以32,右移相当于除以32取整
#define MASK 0x1F //16进制下的31
#define N 10000000
int bitmap[1 + N / WORD];
/*
 * 置位函数——用"|"操作符,i&MASK相当于mod操作
 * m mod n 运算,当n = 2的X次幂的时候,m mod n = m&(n-1)
 */
void set(int i) {
 bitmap[i >> SHIFT] |= (1 << (i & MASK));
}
/* 清除位操作,用&~操作符 */
void clear(int i) {
 bitmap[i >> SHIFT] &= ~(1 << (i & MASK));
}
/* 测试位操作用&操作符 */
int test(int i) {
 return bitmap[i >> SHIFT] & (1 << (i & MASK));
}

实现排序(不能重复):

int main(void) {
 FILE *in = fopen("in.txt", "r");
 FILE *out = fopen("out.txt", "w");
 if (in == NULL || out == NULL) {
 exit(-1);
 }
 int i = 0;
 int m;
 for (i = 0; i < N; i++) {
 clear(i);
 }
 while (!feof(in)) {
 fscanf(in, "%d", &m);
 printf("%d/n", m);
 set(m);
 }
 printf("abnother");
 for (i = 0; i < N; i++) {
 if (test(i)) {
  printf("%d/n", i);
  fprintf(out, "%d/n", i);
 }
 }
 fclose(in);
 fclose(out);
 return EXIT_SUCCESS;
}

相关文章

  • C语言实现将字符串转换为数字的方法

    C语言实现将字符串转换为数字的方法

    这篇文章主要介绍了C语言实现将字符串转换为数字的方法,涉及系统函数atoi()函数的使用技巧,需要的朋友可以参考下
    2014-12-12
  • 深入理解strcpy与memcpy的区别

    深入理解strcpy与memcpy的区别

    本篇文章是对strcpy与memcpy的区别进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 实例讲解C++编程中的虚函数与虚基类

    实例讲解C++编程中的虚函数与虚基类

    这篇文章主要介绍了C++编程中的虚函数与虚基类的实例讲解,虚函数与虚基类的使用是C++入门学习中的基础知识,需要的朋友可以参考下
    2016-02-02
  • C++设计模式之桥接模式(Bridge)

    C++设计模式之桥接模式(Bridge)

    这篇文章主要为大家详细介绍了C++设计模式之桥接模式Bridge,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • C/C++中指针的深入理解

    C/C++中指针的深入理解

    指针在 C\C++ 语言中是很重要的内容,并且和指针有关的内容一向令初学者头大,这篇文章主要给大家介绍了关于C/C++中指针的相关资料,需要的朋友可以参考下
    2021-07-07
  • C++中检查vector是否包含给定元素的几种方式详解

    C++中检查vector是否包含给定元素的几种方式详解

    这篇文章主要介绍了C++中检查vector是否包含给定元素的几种方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • C语言创建windows窗口实例

    C语言创建windows窗口实例

    这篇文章主要介绍了C语言创建windows窗口实例,本文直接给出实现代码,同时讲解了编码的步骤,需要的朋友可以参考下
    2015-04-04
  • 解析C语言与C++的编译模型

    解析C语言与C++的编译模型

    C++继承了C的编译模型,C语言的编译链接模型相对简洁,但C++继承了这些机制之后变得更加复杂难以理解,这里就来带大家简要解析C语言与C++的编译模型
    2016-05-05
  • C/C++中的名字空间与作用域示例详解

    C/C++中的名字空间与作用域示例详解

    这篇文章主要给大家介绍了关于C/C++中名字空间与作用域的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用c/c++具有一定的参考学习价值,需要的朋友们下面随着小编来一起看看吧。
    2017-09-09
  • 详解C++实现拓扑排序算法

    详解C++实现拓扑排序算法

    拓扑排序是对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。本文将对其原理进行讲解,并且用C++进行实现
    2021-06-06

最新评论