开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
1 Star 0 Fork 0

zdevt/cpptest

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (1)
master
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
项目仓库所选许可证以仓库主分支所使用许可证为准
master
分支 (1)
master
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (1)
master
cpptest
/
bhash.cpp
cpptest
/
bhash.cpp
bhash.cpp 4.13 KB
一键复制 编辑 原始数据 按行查看 历史
zdevt 提交于 2026年06月20日 21:12 +08:00 . test
/*
* =========================================================================
*
* FileName: bhash.cpp
*
* Description:
*
* Version: 1.0
* Created: 2021年10月27日 20:57:04
* Last Modified: 2021年10月27日 21:25:37
* Revision: none
* Compiler: gcc
*
* Author: zt ()
* Organization:
*
* =========================================================================
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stddef.h>
#include <string.h>
#include <errno.h>
#include <iostream>
#include <memory>
#include <algorithm>
#include <vector>
#include <thread>
#include <mutex>
#include <map>
#include <list>
#include <string>
#include <functional>
using namespace std;
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
struct person
{
const char* name;
int age;
};
struct store_person
{
struct person* per;
struct store_person* next;
const char* key;
int nHashA;
int nHashB;
};
struct store_person* stuff;
#define HX (20)
#define HY (5)
#define MAX_NUM (HX*HY)
unsigned long cryptTable[MAX_NUM]; //1280
void prepareCryptTable()
{
unsigned long seed = 0x00100001, index1 = 0, index2 = 0, i;
for ( index1 = 0; index1 < HX; index1++ )
{
for ( index2 = index1, i = 0; i < HY; i++, index2 += HX )
{
unsigned long temp1, temp2;
seed = ( seed * 125 + 3 ) % 0x2AAAAB;
temp1 = ( seed & 0xFFFF ) << 0x10;
seed = ( seed * 125 + 3 ) % 0x2AAAAB;
temp2 = ( seed & 0xFFFF );
cryptTable[index2] = ( temp1 | temp2 );
}
}
}
unsigned long HashString ( const char* keystr, unsigned long dwHashType )
{
unsigned char* key = ( unsigned char* ) keystr;
unsigned long seed1 = 0x7FED7FED;
unsigned long seed2 = 0xEEEEEEEE;
int ch;
while ( *key != 0 )
{
ch = toupper ( *key++ );
seed1 = cryptTable[ ( dwHashType << 8 ) + ch] ^ ( seed1 + seed2 );
seed2 = ch + seed1 + seed2 + ( seed2 << 5 ) + 3;
}
return seed1;
}
int GetHashTablePos ( const char* key, struct store_person* per )
{
const int HASH_OFFSET = 0, HASH_A = 1, HASH_B = 2;
int nHash = HashString ( key, HASH_OFFSET ) % MAX_NUM;
int nHashA = HashString ( key, HASH_A ) % MAX_NUM;
int nHashB = HashString ( key, HASH_B ) % MAX_NUM;
printf ( "nHash ==%d\n", nHash );
while ( per[nHash].key )
{
if ( per[nHash].nHashA == nHashA
&& per[nHash].nHashB == nHashB )
{
return nHash;
}
else
{
nHash = ( nHash + 1 ) % MAX_NUM;
}
}
return -1;
}
void hash_set ( const char* keystr, struct person* per )
{
const int HASH_OFFSET = 0, HASH_A = 1, HASH_B = 2;
int nHash = HashString ( keystr, HASH_OFFSET ) % MAX_NUM;
int nHashA = HashString ( keystr, HASH_A ) % MAX_NUM;
int nHashB = HashString ( keystr, HASH_B ) % MAX_NUM;
struct store_person* store = &stuff[nHash];
if ( store->key == NULL )
{
store->key = keystr;
store->per = per;
store->nHashA = nHashA;
store->nHashB = nHashB;
printf ( "store ok ,position is %d\n", nHash );
return;
}
}
int hash_get ( const char* key, struct store_person* per )
{
return GetHashTablePos ( key, per );
}
int main ( int argc, char* argv[] )
{
( void ) argc;
( void ) argv;
prepareCryptTable();
stuff = ( struct store_person* ) calloc ( MAX_NUM, sizeof ( struct store_person ) );
if ( stuff == NULL )
return -1;
struct person pvalue1;
pvalue1.name = "haha";
pvalue1.age = 18;
hash_set ( "key1", &pvalue1 );
struct person pvalue2;
pvalue2.name = "xixi";
pvalue2.age = 20;
hash_set ( "key2", &pvalue2 );
struct person pvalue3;
pvalue3.name = "lala";
pvalue3.age = 12;
hash_set ( "key3", &pvalue3 );
struct person pvalue4;
pvalue4.age = 16;
hash_set ( "zt", &pvalue4 );
struct person pvalue5;
pvalue5.age = 14;
hash_set ( "zt2", &pvalue5 );
int pos = hash_get ( "key2", stuff );
printf ( "pos is %d\n", pos );
printf ( "person name ->%s, person age ->%d\n", stuff[pos].per->name, stuff[pos].per->age );
return 0;
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/zdevt/cpptest.git
git@gitee.com:zdevt/cpptest.git
zdevt
cpptest
cpptest
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /