当前位置: 首页 > wzjs >正文

怎么查看网站有没有做推广个人网站开发软件

怎么查看网站有没有做推广,个人网站开发软件,买完域名后怎么做网站,建设文化网站的目的和意义前言:这次来讲解一下一些具体的实现细节 hash_node作用 struct hash_node // 链表的形式改写 {char *key;uint64_t value;struct hash_node *next; };hash_node 是一个记录对象索引的哈希结构,用来建立 key 到其存储位置的映射。 key 是字符串形式的…

前言:这次来讲解一下一些具体的实现细节


hash_node作用

struct hash_node  // 链表的形式改写
{char *key;uint64_t  value;struct hash_node *next;
};

hash_node 是一个记录对象索引的哈希结构,用来建立 key 到其存储位置的映射。

key 是字符串形式的对象标识;

value 是 64 位压缩信息:包括所在 chunk ID、在 chunk 中的位置、value 长度、key 长度;

用于快速查找 key 存在的位置,并辅助后续的读取或删除操作。

好的,下面是你提供的代码的逐行详细解释,包括每个函数的作用及关键逻辑:


下面我们来看看hashtable的具体代码


创建一个编码的 value

uint64_t create_value(uint32_t key_length, uint32_t chunk_id, uint32_t position, uint32_t length)
{uint64_t tmp = 0;tmp = tmp | length;tmp = tmp | ((uint64_t)position << 12);tmp = tmp | ((uint64_t)chunk_id << 24);tmp = tmp | ((uint64_t)key_length << 56);return tmp;
}
  • 将 key 的长度、chunk ID、在 chunk 中的位置和长度压缩编码为一个 64 位整数,方便作为 value 存储。

初始化哈希表

void hash_table_init(struct hash_node *hash_table[])
{memset(hash_table, 0, sizeof(struct hash_node *) * HASH_MAX_SIZE);
}
  • 初始化哈希表,将所有桶位置设为 NULL。

销毁哈希表

void hash_table_destory(struct hash_node *hash_table[])
{int i = 0;for(i = 0; i < HASH_MAX_SIZE; i++){struct hash_node *p = hash_table[i], *pre = p;while(p){pre = p;p = p->next;free(pre);}}
}
  • 遍历整个哈希表并释放每个链表节点的内存。

初始化一个 hash_node 结构

struct hash_node *hash_node_init(const char *key, const uint64_t value)
{struct hash_node *hn = NULL;hn = (struct hash_node *)malloc(sizeof(struct hash_node));hn->key = (char *)malloc(sizeof(char) * strlen(key) + 1);strcpy(hn->key, key);hn->key[strlen(key)] = '\0';hn->value = value;hn->next = NULL;return hn;
}
  • 创建并返回一个新的 hash_node,存储 key 和 value(被编码过的元信息)。

显示一个 hash_node 的信息

char *display(struct hash_node *hn)
{char *s = (char *)malloc(10000 * sizeof(char));int n = sprintf(s, "%c%s%s%llu%c", '[', hn->key, "]:[", hn->value, ']');s[n] = '\0';return s;
}
  • 返回一个字符串表示 [key]:[value] 格式,用于调试打印。

哈希函数

uint32_t hash_coding(const char *key)
{uint32_t hv = hashkit_jenkins(key, strlen(key), 0);return hv;
}
  • 使用 libhashkit 的 Jenkins 哈希函数对 key 进行哈希。

在哈希表中查找 key

struct hash_node *find_hash_table(struct hash_node *hash_table[], const char *key, uint32_t hv)
{if(key == NULL)return NULL;struct hash_node *hn = hash_table[hv % HASH_MAX_SIZE];while(hn){if(strcmp(key, hn->key) == 0)return hn;hn = hn->next;}return NULL;
}
  • 给定哈希值和 key,查找匹配的节点。

获取 value

uint64_t get_value_hash_table(struct hash_node *hash_table[], const char *key)
{if(key == NULL)return 0;uint32_t hv = hashkit_jenkins(key, strlen(key), 0);struct hash_node *hn = hash_table[hv % HASH_MAX_SIZE];while(hn){if(strcmp(key, hn->key) == 0)return hn->value;hn = hn->next;}return 0;
}
  • find_hash_table 类似,但只返回 value,不返回指针。

插入节点(已知哈希值)

有点像前式链向星

void insert_hash_table_hv(struct hash_node *hash_table[], struct hash_node *hn, uint32_t hv)
{if(hn == NULL)return;hn->next = hash_table[hv % HASH_MAX_SIZE];hash_table[hv % HASH_MAX_SIZE] = hn;
}
  • 将节点插入链表头部(哈希冲突使用链表解决)。

插入节点(使用 key 自动算哈希值)

void insert_hash_table_key(struct hash_node *hash_table[], struct hash_node *hn, const char *key)
{uint32_t hv = hashkit_jenkins(key, strlen(key), 0);if(hn == NULL)return;hn->next = hash_table[hv % HASH_MAX_SIZE];hash_table[hv % HASH_MAX_SIZE] = hn;
}
  • 与上一个函数功能一样,区别在于自动计算哈希值。

删除指定 key 的节点

int del_hash_table_key(struct hash_node *hash_table[], const char *key)
{if(key == NULL)return 1;uint32_t hv = hashkit_jenkins(key, strlen(key), 0);struct hash_node *hn = hash_table[hv % HASH_MAX_SIZE];if(hn && strcmp(key, hn->key) == 0){hash_table[hv % HASH_MAX_SIZE] = hn->next;}else{struct hash_node *pre = hn;while(hn){if(strcmp(key, hn->key) == 0)break;pre = hn;hn = hn->next;}if(hn == NULL)return 1;pre->next = hn->next;}return 0;
}
  • 删除 key 对应的节点,返回 0 表示成功,1 表示没找到。

总结

这段代码实现了一个基础但功能完整的哈希表结构:

  • 使用 Jenkins 哈希函数;
  • 支持插入、查找、删除;
  • value 被编码为位置、长度等信息;
  • 在 ECHash 框架中作为元数据索引使用;
  • 用于追踪某个键在哪个 chunk 中、在哪个偏移、长度多少等关键信息。

文章转载自:

http://MGZyMzRi.krtky.cn
http://MKW7bxHA.krtky.cn
http://o3BW60jr.krtky.cn
http://gS9OPCeY.krtky.cn
http://wWhLWiCW.krtky.cn
http://G4kfaGFl.krtky.cn
http://WC44zm17.krtky.cn
http://qgLwjOwq.krtky.cn
http://od7ggxme.krtky.cn
http://x1zUFOjH.krtky.cn
http://HS66NUB3.krtky.cn
http://tk6SqLOZ.krtky.cn
http://yhpKhQ9d.krtky.cn
http://BzLOMfD6.krtky.cn
http://BzIbTCPd.krtky.cn
http://qAQUhasT.krtky.cn
http://NQWoes79.krtky.cn
http://lwsDdYnk.krtky.cn
http://DVgddQw7.krtky.cn
http://g1Zb3Wny.krtky.cn
http://copqxsuU.krtky.cn
http://hwCEzyGr.krtky.cn
http://OaXIUkXy.krtky.cn
http://8ZJ9U7en.krtky.cn
http://iT7Naox6.krtky.cn
http://fBtT6MVR.krtky.cn
http://dhkDd7YT.krtky.cn
http://nqjzTR7V.krtky.cn
http://S2R0WRyi.krtky.cn
http://d9s6rGvM.krtky.cn
http://www.dtcms.com/wzjs/680329.html

相关文章:

  • 营销型网站建设就找山东艾乎建站盘锦网站建设咨询
  • 创意个人网站设计济南专业做企业网站
  • 内蒙古自治区住房和城乡建设部网站怎么免费推广自己的业务
  • 快站建站教程建企聘企业管理有限公司
  • 南充做网站的公司打不开建设银行网站
  • seo 哪些媒体网站可以发新闻怎么夸一个网站开发公司
  • 霸县网站建设网站制作400哪家好
  • 如何自己免费制作网站计算机网页设计实训报告
  • asp网站首页模板柳州做网站有kv
  • 现在推广网站最好的方式线上推广有哪些方式
  • wpf做的网站wordpress跨境平台
  • 企业门户网站页面模板栾城住房和城乡建设局网站
  • 上海域名网站深圳建设交易宝安
  • 网站浏览量怎么查看信息网站的建设
  • 怎么做好一个网站使用tag的网站
  • php旅游网站模板下载做网站起什么名字好呢
  • 站酷网页版东莞易宣网站建设公司怎么样
  • 什么网站可以做平面设计赚钱内蒙古做网站公司
  • 用asp做网站流程北京的网站建设
  • 做网站后台学什么专业不想用wordpress
  • 营销型网站建设哪里济南兴田德润优惠吗郑州移动端网站建设
  • vs网站开发教程免费写文案神器
  • 搜索网址网站建站html网页完整代码作业
  • 凡科建站快车有哪些网站可以免费的
  • 网站设计_网站建设_手机网站建设游戏搬砖工作室加盟平台
  • 微信电脑网站是什么原因南宁网站制作工具
  • 博客网站wordpress专业商城网站设计制作
  • 东莞网站建设哪家最好湛江cms模板建站
  • 无锡谁会建商务网站企业网站建设报价清单
  • 网站挣钱怎么做全国建设部网站证书查询