zoukankan      html  css  js  c++  java
  • 手写哈希类

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<math.h>
     4 #define Mod 100007     //取模的大小,哈希表的大小...
     5 #define Max 50         //存放的总数
     6 typedef long long LL;
     7 class Hash             //手写哈希
     8 {
     9   public:
    10     int hs[Mod];       //哈希值  设定的哈希函数为 原值 % Mod ,所以哈希值有可能是 0 ~ Mod-1
    11     int next[Max];     //链表    存放哈希值相等的一条链,他的大小取决于所有原值的数量
    12     LL S[Max];         //存放原值
    13     int H[Max];        //存放所有哈希值
    14     int sn;            //不同原值的数量
    15     int hn;            //不同哈希值的数量
    16     Hash()             //构造函数: 定义Hash类变量时初始化
    17     {
    18       sn=0;
    19       hn=0;
    20       for(int i=0;i<Mod;i++)
    21         hs[i]=0;
    22     }
    23     void clear()       //清空函数
    24     {
    25       sn=0;
    26       for(int i=0;i<hn;i++)
    27         hs[H[i]]=0;
    28       hn=0;
    29     }
    30     void add(LL s)           //加入
    31     {
    32       int ha=abs(s)%Mod;     //计算哈希值
    33       if(hs[ha]==0)          //如果该哈希值还未出现过
    34       {
    35         H[hn++]=ha;          //将该哈希值记录起来,同时哈希值数量加 1
    36       }
    37       sn++;                  //0 表示结尾,所以从1 开始存,原值数量加 1,特别针对 hs数组
    38       S[sn]=s;               //将原值记录起来
    39       next[sn]=hs[ha];       //原本原值记录位置
    40       hs[ha]=sn;             //最新原值记录位置,如果从0 开始存,就无法判断此时是空还是1个值
    41       //比如:5 和 10 有一样的哈希值 ,并且 5 和 10 先后加入 那么有:
    42       //5 加入: next[1] = 0; hs[5] = 1; hs[5] 是哈希值为5 的头,表示第一个原值在1的位置
    43       //10加入: next[2] = 1; hs[5] = 2; 表示第一个哈希值为5的在2,第二个在1,第三个不存在
    44     }
    45     int find(LL s)           //查找
    46     {
    47       int ha=abs(s)%Mod;     //计算哈希值
    48       int k=hs[ha];          //
    49       while(k!=0)
    50       {
    51         if(S[k]==s) return k;//找到
    52         k=next[k];           //下一个节点
    53       }
    54       return 0;              //表示没找到
    55     }
    56 };
    57 int main()
    58 {
    59 
    60   return 0;
    61 }
  • 相关阅读:
    软件工程结课作业
    十三次作业
    十二次作业
    十一次作业
    十次作业
    找回感觉的练习
    CSS背景样式和列表样式
    盒子模型案例应用
    display属性
    margin外边距属性
  • 原文地址:https://www.cnblogs.com/hchlqlz-oj-mrj/p/4768804.html
Copyright © 2011-2022 走看看