位图数据结构

BMP位图数据结构 可配合我的第一篇文章加深理解------C语言实现BMP图像的写入与图像的清空(256色灰度图)                                                                                  下面的数据是在vs调试下内存查看的 阅读详情

位图数据结构描述了一个有限定义域内的稠密集合,其中的每一个元素最多出现一次并且没有其他数据与该元素相关联。在内存空间有限的条件下,在相同的内存下,位图数据结构可以存储远远比用其他数据类型存储多得多的数据,同时在时间要也是一个不错的选择;

位图数据结构的通过用每一位保存一个数,多个位组成一个基本数据类型,多个同一数据类型形成一个数组,比如int有四个字节,32位,可以保存32个数分别是0~31,int[2]总共有64个位,可以保存0~63之间的数,依次类推,当然数据类型不局限与int,也可以是其他。可以看出位图数据结构有一个优点,那就是所需空间少,可以极大的利用空间。

以下是位图数据结构的具体实现步骤:

//位图数据结构

#include<stdio.h>
#include <stdlib.h>
#define SIZE 5        //数组的大小,主要是测试用,可以更大
void init(int *bm);   //初始化
void Setbit(int *bm,int n);  //设置第n位,即保存数n
void Clearbit(int *bm,int n);//对n位清零,即删除数n
int Testbit(const int *bm,int n); //判断n是否存在

//初始化
void init(int *bm)
{
	int i;
	for(i = 0;i < SIZE;i++)
		bm[i] = 0;
}
//设置第n位
//n>>5相当于n/32;定位到n保存数组的第几个元素中
//n&0x1F相当于n%32,由于移位运算,当n
//比如35;35>>5 = 1,35&0x1F = 3即35保存的位置为第1个元素的第3位
void Setbit(int *bm,int n)
{
	if(n <0 || n > SIZE*32)
		printf("%d 不存在,小于0或者大于最大值!\n",n);
	bm[n>>5] |= (1<<(n&0x1F));
}

//清楚第n位
void Clearbit(int *bm,int n)
{
	if(n < 0 || n > SIZE*32)
		printf("%d 不存在,小于0或者大于最大值!\n",n);
	bm[n>>5] &= (~(1<<(n&0x1F)));
}

//测试第n位是否存在
int Testbit(const int *bm,int n)
{
	if(n < 0 || n > SIZE*32)
		printf("%d 不存在,小于0或者大于最大值!\n",n);
	return bm[n>>5] & (1<<(n&0x1F)) ;
}
//测试
int main()
{
	int a[SIZE];
	int i = 0,n,temp;
	init(a);
	printf("请输入数量:");
	scanf("%d",&n);
	printf("请输入数据(%d个):",n);
	for(i = 0;i < n;i++)
	{
		scanf("%d",&temp);
		Setbit(a,temp);
	}
	for(i = 0;i < SIZE*32;i++)
	{
		if(Testbit(a,i))
			printf("%5d",i);
	}
	printf("\n");
	return 0;
}
其实,一路下来,位图的实现相对来说并不难,甚至相比其他数据结构来说比较简单,其中的位运算主要是加快运行速度,由于其实现简单,我们也可以通过宏进行实现。不过位图数据结构也有局限性,就如同前面所提到的,数据必须无重复,同时数据的大小必须小于你所使用的数组(或其他)的大小(位的个数)同时在读出排序后的元素时,由于需要扫描数组,而且是一个一个位进行扫面,在数据比较大,但个数少的时候,可能就有点得不偿失了;

                                                                                                           ——如有错误的地方,欢迎指正,如有问题,欢迎留言

数据结构之位图(bitmap)详解 主要介绍了数据结构之位图详解,本文讲解了位图的基本知识、位图的实现方法、位图的应用等内容,需要的朋友可以参考下 立即下载

相关推荐

Python海康摄像头SDK二次开发

摘要:为解决海康威视摄像头RTSP拉流延迟严重的问题,本文提出改用海康私有SDK直接取流的方案。通过下载海康设备网络SDK并调用其Python接口,实现了低延迟的视频流获取。文中详细介绍了SDK配置流程,并提供了优化版的Python代码示例,重点解决回调函数处理、队列缓冲和CPU占用等问题。测试结果表明,该方案显著降低了延迟,同时保持了较高的帧率(30FPS以上)和较低的CPU占用率(约2%)。相较于传统OpenCV+FFmpeg的RTSP方案,海康SDK直接取流在实时性方面具有明显优势。

xiaohouzi112233的博客 2608

位类型数据

#include using namespace std; int main() { struct A { unsigned int a:1; unsigned int b:2; int c:1; int d:2;

胜利者的经验并不复杂,那就是寻找人生的关键点,并在关键时刻竭尽全力 1271

CMAC算法原理

2、K1 通过以下运算导出:若 L 的最高有效位等于 0,则 K1 是 L 的左移 1 位。3、K2 通过如下运算导出:若 K1 的最高有效位等于 0,则 K2 是 K1 的左移 1 位。采用了 AES 算法中的类似 CBC 模式的加密方式,即对前一个分组的密文与当前分组的明文进行异或操作后在加密,2、分块处理:首先将消息分成多个固定长度的块,若消息长度不是块大小的倍数,则可以使用填充来将其填充到合适的大小。1、子密钥计算,通过主密钥生成子密钥(key1,key2),子密钥用于最后一个块处理;

sky的博客 1658

数据结构:位图

所有比特的编号方法是,从低字节的低位比特位开始,第一个bit为0,最后一个bit为 2^(n-1)。比如说,现在有个数组是这样子的,int a[4],那么 a[0]的比特位为0——31 a[1]的比特位为32——63 a[2]的比特位为64——95 a[3]的比特位为96——127比如说现在我们有100这个数,于是,我们要将第100位置为1,也就是说,我们最少得有100位,100位等于12.

ChaseRaod的博客 684

C语言实验——各位数字之和排序

C语言实验——各位数字之和排序Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Description给定n个正整数,根据各位数字之和从小到大进行排序。 Input输入数据有多组,每组数据占一行,每行的第一个数正整数n,表示整数个数,后面...

aiLMengi000的博客 1243

中微8S6990外设开发实战:从GPIO配置到低功耗休眠的完整指南

本文提供了中微8S6990增强型8051单片机从GPIO配置到低功耗休眠的完整实战指南。详细讲解了开发环境搭建、GPIO灵活配置、定时器中断、ADC采样优化、PWM电机控制等核心外设的编程要点与避坑技巧,并重点阐述了实现超低功耗休眠的系统性外设管理策略,帮助开发者快速上手并优化产品续航。

weixin_29162439的博客 533

*.bmp,*.ico,*.wmf,*.gif和*.jpg这几种图片格式的区别在哪?

区别.bmp是位图,对图像不进行任何压缩.所以图片显示的非常清晰,但是文件比较大..jpg(jpeg)文件,采用了比较先进的压缩技术,所以文件比较小但是能保证图片显示的清晰和艳丽..gif压缩比较大,文件较小,由于这种格式的本意是用来交换图片的.最初只能存储一张静止的图片,后来技术发展了,可以同时在一个文件中同时保存多张静止图片并且可连续显示,所以我们一般看的简单的动画效果都是用.gif格式存

Mdesigner的专栏 7843

反爬虫:对抗最新反爬技术 Cloudflare详解

本文针对Cloudflare最新反爬机制提供完整解决方案,覆盖TLS指纹、行为轨迹、设备指纹等检测场景。文章首先分析Cloudflare的三重检测体系(TLS指纹、行为指纹、设备指纹)及其拦截表现,随后提出四种绕过方案:1)使用curl_cffi模拟浏览器TLS指纹;2)通过undetected-chromedriver移除自动化特征;3)Playwright结合stealth插件模拟人类行为;4)动态请求调度策略。重点推荐轻量级Python方案curl_cffi和浏览器自动化方案Playwright-st

数据知道的博客 4624

C++_BitMap(位图)

位图的概念 数据是否在给定的整形数据中,结果是在或者不在,刚好是两种状态,可以使用一个二进制比特位来代表数据是否存在的信息,如果二进制比特位为1,代表存在,为0代表不存在。 位图,就是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。 位图的实现 class BitSet { public: BitSet(size_t range) ...

hello呀! 1630

STM32N6570-DK识别STLINK问题,如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 2209

深度学习在地质勘探中的应用:使用Python构建卷积神经网络进行地震数据分析

在本文中,我们介绍了如何利用深度学习技术,特别是卷积神经网络(CNN),来处理和分析地震数据。我们使用了Python编程语言和TensorFlow框架构建了一个CNN模型,并使用地震数据进行了训练和评估。在本文中,我们将探讨如何利用深度学习技术,特别是卷积神经网络(CNN),来处理和分析地震数据。首先,我们需要获取地震数据集。通过本文的介绍,希望您能对深度学习在地质勘探领域的应用有更深入的了解,并能够应用这些技术来解决实际问题。在准备好地震数据和构建CNN模型后,我们需要将数据分为训练集和测试集。

斌擎科技 1472

[数据结构]——位图原理及实现

位图 今天我们所介绍的数据结构叫做位图,在谈什么是位图之前我们先来看一道"非常简单的题":有40亿个无符号的整型数据,现在给定一个目标数字,判断这个数字是否在这40亿数据中。题目看起来确实非常简单,有的同学说直接遍历一遍不就ok了吗?还有的同学给出了更高效的查找方式就是将这些数字排序然后进行二分查找。但是,这是有问题的,问题并不在于你搜索这个数字的效率问题,而是你在遍历也好排序也罢,这些数字在内存...

lucky52529的博客 3万+

Ardupilot chibios IO固件,IO与FMU通信,固件下载(3)

目录 文章目录目录摘要 摘要 本节主要记录自己学习IO与FMU通信

陌城烟雨 2801

【数据结构进阶】位图

位图,这一简洁而高效的数据结构,以其独特的二进制存储方式,在数据处理领域展现了强大的生命力。尽管存在局限性,它仍是解决特定问题的利器,并为更高级的数据结构,如布隆过滤器奠定了基础。在数据爆炸的时代,位图的思想将继续闪耀,为高效数据处理提供源源不断的灵感。

2301_80955819的博客 2019

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【数据结构取经之路】位图全解

位图(Bitmap)是一种非常高效的数据结构,主要用于处理大量数据的快速查找、去重等操作。它利用每一位(bit)来表示某个元素是否存在或某种状态,从而极大地节省了存储空间。在内存和存储空间相对受限的环境下,位图尤其有用。下面,我们先瞅一眼C++标准库里的位图,然后再抽出它的核心部分来自己实现。

记录代码路上的点滴思考。 1589

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【数据结构】 ——浅谈位图以及位图原理

一、位图概念 今天学校的课还挺多的,不过我也没怎么听,嘤嘤嘤,好不容易的抽出一点时间整理下位图。进入正题吧位图(bitset)是一种常见的数据结构,常用在给一个很大范围的数(比如我之前看到一个题是有四十亿个数),判断其中的数是不是在其中。这里就要用到位图,显然这么多得数在内存中是存不下的,我们就得重新想办法。位图在索引、数据压缩有很大的应用。位图使用数组实现的,数组的每一个元素的每一个二进制位都表...

Vicky_Cr的博客 2268

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

数据结构之位图(11)

1、原理 位图是通过将数组下标与应用中的一些值关联映射,数组中该下标所指定的位置上的元素可以用来标识应用中值的情况(是否存在或者数目 或者计数等),位图数组中每个元素在内存中占用1位,所以可以节省存储空间。位图是一种非常简洁快速的数据结构,它能同时使存储空间和速度最优化。如可用一个10位长的字符串来表示一个所有元素都小于10的简单的非负整数集合,例如,可以用如下字符串表示集合{1,2,4

公众号(猴子数据分析) 6023

数据结构-位图

1.概念: 位图,就是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。 位图其实是用数组实现的,数组的每一个元素的每一个二进制位都可以表示一个数据在或者不在,0表示数据存在,1表示数据不存在。因为比特位只有两种状态,要么是0,要么就是1,所以位图其实就是一种直接定址法的哈希,只不过位图只能表示这个值在或者不在。 如下图所示: 当我们探测到25比特位的值为1时,我们就可以判断出136这个数据存在。 2.位图的实现(主要接口) 1) se..

m0_58086930的博客 2453

【高阶数据结构】位图(BitMap)

介绍了位图数据结构的概念、实现原理、优缺点,并使用Go语言模拟实现了自定义位图数据结构

weixin_62533201的博客 2062

【数据结构】位图BitMap

给40亿个不重复的无符号整数,没拍过序。给定一个无符号整数,如何可以高效的判断是否存在这些数据中。 直接的想法是,我们将这些的无符号整数存储到内存中,然后用给定的数进行一一比较。 我们分析一下,一个无符号整数是4个字节,40亿* 4个字节,10亿个字节大概就是4个G,40亿个无符号整数就是16G 计算机内存一般没这么大,就算有这么大,也要分给操作系统什么的吧,直接存储整形不好实现; 再说,

皓皓松的博客 3381

23. 数据结构之位图

位图(Bitmap)作为一种特殊的数据结构,它使用一系列位来表示数据,每个位只有两个状态(0或1)。由于它的高效性和节省空间的特性,位图在很多场景中都有广泛的应用。本节,我们就位图展开详细介绍。

wlyang666的博客 1725

【高效数据结构——位图bitmap】

位图(Bitmap)是一种用于表示和操作位(bit)的数据结构。它是由一系列二进制位(0 或 1)组成的序列,每个位都可以单独访问和操作。位图常用于以下情况:压缩存储:位图可以有效地存储大量的布尔值信息,每个位只占用一个比特,因此可以大幅减少存储空间的占用。例如,当需要存储大量的开关状态、标志位或者布尔型数据时,使用位图可以节省内存。快速查找和查询:由于位图的特殊存储结构,它可以快速进行位的查找和查询。例如,可以用位图表示一组元素的存在与否,然后通过位运算来快速进行成员的查找、去重、交集、并集等操作。

ww的博客 1321
上一篇: 链表的两种实现方法
下一篇: Shell脚本语法
float_wind
博客等级 码龄11年 2粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值