基于C语言实现位图

之前写过哈希表的一些操作,下面来介绍哈希表的一种变形——位图
位图是用来表示数字是否存在的情况

位图的优点是能够节省很多空间,但是缺点就是只能够表示数字是否存在
1.初始化操作
 12 void BitmapInit(Bitmap* bm,uint64_t capacity)
 13 {
 14     if(bm == NULL)
 15     {
 16         //非法输入
 17         return ;
 18     }
 19     bm->capacity = capacity;//capacity 表示该位图能表示的最大的数字
 20     uint64_t size = GetSize(capacity);//size表示申请内存时对应数组元素个数
 21     bm->data = (BitmapType*)malloc(sizeof(BitmapType)*size);
 22     memset(bm->data,0,sizeof(BitmapType)*size);
 23 }
 24 


2.销毁操作
 25 void BitmapDestroy(Bitmap* bm)
 26 {
 27     if(bm == NULL)
 28     {
 29         return ;
 30     }
 31     bm->capacity = 0;
 32     free(bm->data);
 33     return ;
 34 }

3.
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现稀疏数据结构(Sparse Data Structure)可以使用C语言中的多种数据结构和技术,包括哈希表、位、稀疏矩阵、稀疏向量等。以下是一个简单的例子,展示如何使用C语言实现一个简单的哈希表来存储稀疏数据。 首先,我们需要定义一个哈希表的数据结构。哈希表是一种基于哈希函数的数据结构,它将键值对存储在内存中,通过哈希函数快速查找和插入数据。以下是一个简单的哈希表实现: ```c #include <stdlib.h> #include <string.h> typedef struct Entry { int key; int value; struct Entry* next; } Entry; typedef struct HashTable { Entry* table; int size; } HashTable; HashTable* create_hash_table(int size) { HashTable* hash_table = malloc(sizeof(HashTable)); hash_table->size = size; hash_table->table = malloc(hash_table->size * sizeof(Entry)); return hash_table; } void destroy_hash_table(HashTable* hash_table) { free(hash_table->table); free(hash_table); } int hash(HashTable* hash_table, int key) { // 简单的哈希函数实现,根据key计算哈希值,取模到表的大小,如果模到末尾,重新开始取模 return (key % hash_table->size); } ``` 然后,我们可以通过键值对来插入和查找数据: ```c void insert(HashTable* hash_table, int key, int value) { int index = hash(hash_table, key); Entry* entry = hash_table->table + index; entry->key = key; entry->value = value; entry->next = NULL; } int lookup(HashTable* hash_table, int key) { int index = hash(hash_table, key); Entry* entry = hash_table->table + index; if (entry->key == key) { return entry->value; } else { // 继续查找下一个元素,直到找到或者遍历完整个哈希表 Entry* prev = entry; while (prev->next != NULL) { prev = prev->next; if (prev->key == key) { return prev->value; } } return -1; // 未找到键值对,返回-1或者其他错误码表示失败。 } } ``` 以上就是一个简单的C语言实现稀疏数据结构的例子,它使用哈希表来存储键值对。当然,稀疏数据结构还有很多其他实现方式,比如位、稀疏矩阵、稀疏向量等,具体使用哪种方式取决于你的具体需求和应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值