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. 设计模式之Inheritance versus Parameterized Types 继承和参数化类型

    Another (not strictly object-oriented)technique for reusing functionality is through parameterized t ...

  2. ProgressBar 示例及自定义样式

    在layout中使用ProgerssBar,其中使用了自定义的样式 <ProgressBar android:id="@+id/footer_refresh_prgs" st ...

  3. Jquery的.post说解

    Jquery的.post说解(一) 准备工作 ·Customer类   public class Customer {     public int Unid { get; set; }     pu ...

  4. struts2的@Result annotation 如何添加params

    参考: http://struts.apache.org/2.0.11/docs/result-annotation.html http://jdkcn.com/entry/add-params-to ...

  5. HighCharts 饼图

    @{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Layout.cshtml"; } @section ...

  6. LA 3295 (计数 容斥原理) Counting Triangles

    如果用容斥原理递推的办法,这道题确实和LA 3720 Highway很像. 看到大神们写的博客,什么乱搞啊,随便统计一下,这真的让小白很为难,于是我决定用比较严格的语言来写这篇题解. 整体思路很简单: ...

  7. BZOJ1272: [BeiJingWc2008]Gate Of Babylon

    题解: 多重集合的组合数?还是0-m?有些元素有个数限制? 多重集合的组合数可以插板法,0-m直接利用组合数的公式一遍求出来,个数限制注意到只有15个,那我们就暴力容斥了 AC了真舒畅.. 注意开lo ...

  8. Linux LiveCD 的制作

    Knoppix,只需一张光盘, 就能够让我们在任何场所,随心所欲地使用 Linux1, 打破了操作系统只能先安装再使用的传统概念. Knoppix 最初的设计用途是教学,但由于这项技术很受欢迎,使得  ...

  9. cocos2d-x 滚动文字(二)

    http://blog.csdn.net/kuovane/article/details/8131789 首先送上demo,下载地址为:demo下载地址 一,怎么在文字前面空两隔?只需在xml里的文字 ...

  10. Java [Leetcode 83]Remove Duplicates from Sorted List

    题目描述: Given a sorted linked list, delete all duplicates such that each element appear only once. For ...