bitmap是一个十分有用的结构。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。

适用范围:可进行数据的快速查找,判重,删除
 
如下是实现的代码示例,用C实现,bitmap的起始位置为0
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
typedef struct bitmap {
size_t capacity;
char* bit_array;
}bitmap_t; int bitmap_init(bitmap_t* bitmap, const size_t capacity) {
if (!bitmap) {
return -;
}
//bitmap->capacity = capacity >>3 + 1;
size_t alloc_size = capacity >> + ;
bitmap->capacity = capacity;
char* ptr = (char*)malloc(alloc_size);
if (!ptr) {
return ;
}
memset(ptr, , alloc_size);
bitmap->bit_array = ptr;
return ;
} void get_index(const int index, int* high_pos,
char* low_pos) {
*high_pos = index >> ;
*low_pos = index & 0x7;
}
int bitmap_get(const bitmap_t* bitmap, const int index) {
int high_pos;
char low_pos;
get_index(index, &high_pos, &low_pos);
if (high_pos >= bitmap->capacity) {
return -;
}
char value = bitmap->bit_array[high_pos];
return (value &(0x1<< low_pos));
}
int bitmap_data(const bitmap_t* bitmap, const int index) {
return ;
}
int bitmap_set(bitmap_t* bitmap, const int index) {
int high_pos;
char low_pos;
get_index(index, &high_pos, &low_pos);
if (high_pos >= bitmap->capacity) {
return -;
}
bitmap->bit_array[high_pos] |= (<<low_pos); return ;
} int main(int argc, char * argv[]) {
int array[] = {,,,,,,,,,,,,
,,,,,,,,};
int range = ;
const int len = sizeof(array)/sizeof(array[]);
bitmap_t bitmap;
bitmap_init(&bitmap, range);
for (int i = ; i < len; ++i) {
bitmap_set(&bitmap, array[i]);
printf("set_value = %d\n", array[i]);
}
for (int i = ; i < range; ++i) {
if (bitmap_get(&bitmap, i) > ) {
printf("get_value = %d\n",i);
} }
return ;
}

bitmap的实现方法的更多相关文章

  1. Android处理Bitmap的一些方法

    http://www.it165.net/pro/html/201305/5795.html # 文件与Bitmap间的方法 1. 从文件载入Bitmap 01./** 02.* @brief 从文件 ...

  2. 异步加载图片以及Bitmap相关处理方法

    私类: // 异步更新Image private class GetImageTask extends AsyncTask<String, Void, Bitmap> { // 覆写的方法 ...

  3. 是否需要主动调用Bitmap的recycle方法

    一个Bitmap使用完后,是只需要等它成为垃圾后让GC去回收,还是应该主动调用recycle方法呢?或者说,主动调用recycle方法是否有好处,是否能马上回收内存呢? 带着这个问题来看源码(我看的4 ...

  4. android中Bitmap的放大和缩小的方法

    android中Bitmap的放大和缩小的方法 时间 2013-06-20 19:02:34  CSDN博客原文  http://blog.csdn.net/ada168855/article/det ...

  5. 浅谈Android下的Bitmap之大Bitmap加载

    引言 我们常常提到的“Android程序优化”,通常指的是性能和内存的优化,即:更快的响应速度,更低的内存占用.Android程序的性能和内存问题,大部分都和图片紧密相关,而图片的加载在很多情况下很用 ...

  6. C# Bitmap deep copy

    今天在研究一个关于 Bitmap deep copy 的问题, 经过一系列的查询,在StackOverFlow上面找到了答案,遂记录下来: public static Bitmap DeepCopyB ...

  7. CBitmap、HBITMAP、BITMAP相互转换

    一:理解 BITMAP是C++中定义的位图结构体 HBITMAP是Windows中使用的位图句柄 CBitmap是MFC封装的位图类 二:相互转换 1.HBITMAP->CBitmap 方法一: ...

  8. drawable以及Bitmap的基本操作

    一.drawable  图形对象,可以转载常用格式的图像,可能是(位图)Bitmapdrawable,或者shapedrawable(图形),还可能是多种其他图片格式GIF,PNG,JEPG 二.Bi ...

  9. Android图像处理之Bitmap类

      Bitmap是Android系统中的图像处理的最重要类之一.用它可以获取图像文件信息,进行图像剪切.旋转.缩放等操作,并可以指定格式保存图像文件.本文从应用的角度,着重介绍怎么用Bitmap来实现 ...

随机推荐

  1. Android使用Fragment程序崩溃

    调用Fragment的Activity要继承并实现Fragment.OnFragmentInteractionListener

  2. Oracle Create DBLink

    DROP PUBLIC DATABASE LINK ORA11G_DBLINK; CREATE   PUBLIC   DATABASE LINK ORA11G_DBLINKCONNECT TO SYS ...

  3. Ogre内存池的使用和说明

    大家可能会遇到一些Ogre中的内存分配的方面问题,我对这个总结了一下内存分配的方面资料. Ogre在1.7版本后,统一了内存分配策略,提供了内存是否泄漏的跟踪和内存池等比较方便开发的一些策略,目前提供 ...

  4. SGU 187 - Twist and whirl -- want to cheat

    原题地址:http://acm.sgu.ru/problem.php?contest=0&problem=187 太开心啦!!!!这道题从2013年开始困扰我!!今天晚上第四次下定决心把它写一 ...

  5. UVa 10817 (状压DP + 记忆化搜索) Headmaster's Headache

    题意: 一共有s(s ≤ 8)门课程,有m个在职教师,n个求职教师. 每个教师有各自的工资要求,还有他能教授的课程,可以是一门或者多门. 要求在职教师不能辞退,问如何录用应聘者,才能使得每门课只少有两 ...

  6. shiro实现APP、web统一登录认证和权限管理

    先说下背景,项目包含一个管理系统(web)和门户网站(web),还有一个手机APP(包括Android和IOS),三个系统共用一个后端,在后端使用shiro进行登录认证和权限控制.好的,那么问题来了w ...

  7. UVA 550 Multiplying by Rotation (简单递推)

    题意:有些数字是可以这样的:abcd*k=dabc,例如179487 * 4 = 717948,仅仅将尾数7移动到前面,其他都不用改变位置及大小.这里会给出3个数字b.d.k,分别代表b进制.尾数.第 ...

  8. Java [leetcode 7] Reverse Integer

    问题描述: Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 Ha ...

  9. hdu 3496 Watch The Movie

    题意:题目给定N部电影,每部电影有时长和价值,要求看M部电影,并且时间控制在L以内,转化为背包问题,让我们在N件物品中找正好M件物品塞进容量L的包中,求最大的价值.// dp[i][j] 表示在容量为 ...

  10. 【转】iOS学习之Autolayout(代码添加约束) -- 不错不错

    原文网址:http://www.cnblogs.com/HypeCheng/articles/4192154.html DECEMBER 07, 2013 学习资料 文章 Beginning Auto ...