哈希表(不考虑碰撞情况)

#ifndef LyThash_HashData
#define LyThash_HashData 0X4C

#define __HashHead_Struct__ struct
#define __HashHead_TypeSt__ typedef struct
#define __HashHead_UINT__ unsigned int
#define __HashHead_INT__ int

//Hash Error Define
#define __Hash_Not_Found_The_Value__ -1
#define __Hash_irrationality_Value__ -2

#define __Check_Hash_Struct
#define __Check_Hash_BarVal
#define __Check_Hash_FunSet

#define __Data_Is_exist 1
__Check_Hash_Struct struct LhashNode
{
	__Check_Hash_BarVal __HashHead_UINT__ In_TableData;//Data*10+Data(exist or unexisr)
	__Check_Hash_BarVal __HashHead_UINT__ In_TableMapp;//Map*10+Map(exist or unexisr)
};
__Check_Hash_FunSet __HashHead_UINT__ VisRalhash(__Check_Hash_BarVal __HashHead_UINT__ _X, __Check_Hash_BarVal __HashHead_UINT__ Mov)
{
    __Check_Hash_BarVal __HashHead_UINT__ Move = (_X + Mov + 1) % 5;
    __Check_Hash_BarVal __HashHead_UINT__ LyT[5] = { 3,7,2,1,_X };
    return _X * 10 + LyT[Move] * (_X >> 1);
}
__Check_Hash_FunSet void Insert_Hash(LhashNode* _T, __Check_Hash_BarVal __HashHead_UINT__ Val, __Check_Hash_BarVal __HashHead_UINT__ Loc, __Check_Hash_BarVal __HashHead_UINT__ Mov)
{
    __Check_Hash_BarVal __HashHead_UINT__ Temp = VisRalhash(Val,Mov);
    _T[Temp].In_TableMapp = Loc * 10 + __Data_Is_exist;//最低位表示存在状态
    _T[Loc].In_TableData = Val * 10 + __Data_Is_exist;
}//return (_X+1)*10
__Check_Hash_FunSet void Remove_Hash(LhashNode* _T, __Check_Hash_BarVal __HashHead_UINT__ Val, __Check_Hash_BarVal __HashHead_UINT__ Mov)
{
    __Check_Hash_BarVal __HashHead_UINT__ Temp = VisRalhash(Val, Mov);
    _T[_T[Temp].In_TableMapp].In_TableData = 0;
    _T[Temp].In_TableMapp = 0;
}//return (_X+1)*10
__Check_Hash_FunSet __HashHead_INT__ Find(LhashNode* _T, __Check_Hash_BarVal __HashHead_UINT__ Val,__Check_Hash_BarVal __HashHead_UINT__ Mov)
{
    __Check_Hash_BarVal __HashHead_UINT__ Temp = VisRalhash(Val, Mov);
    __Check_Hash_BarVal __HashHead_INT__ Index = _T[Temp].In_TableMapp;
    if (Index == 0)
        return __Hash_Not_Found_The_Value__;
    else
        return Index / 10;
}//return (_X+1)*10
#endif // !LyThash_HashData
#ifdef	YS_Start
#error 原神,启动!
#endif

想抗碰撞的评论区发,可能要肝半个月

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值