c++实现哈希表的实例

  

<强> c++实现哈希表的实例

  

该散列表的散列函数采用了除法散列函数,乘法散列函数,全域散列函数,每一个槽都是使用有序单向链表实现。
  

  

<>强实现代码:

  

LinkNode。h
  

              # include   使用名称空间性病;   类链接;   类LinkNode   {   私人:   int的关键;   LinkNode *下;   朋友联系;   公众:   LinkNode():关键(1)、下(NULL) {}   LinkNode (int num):关键(num)、下(NULL) {}   int Getkey ()   {   返回键;   }      };      之前      

,链接。h
  

        # include“LinkNode.h”   类散列;   类的链接   {   私人:   朋友散列;   LinkNode *头;   int长度;   公众:   链接():头(NULL),长度(0)   {}   链接(LinkNode *节点):头(节点)   {   长度+=1;   }   ~链接()   {   MakeEmpty ();   }   空白MakeEmpty ()   {   如果(头==NULL)   返回;   LinkNode * p=头;   而(p)   {   头=头→下;   删除p;   p=头;   }   }   int GetLength ()   {   返回长度;   }   插入空白(int num)   {   长度+ +;   LinkNode * p=new LinkNode (num);   如果(头==NULL)   {   头=p;   返回;   }   LinkNode * q=头,* t=头→下;   如果(q→key> num)   {   头=p;   头→下=问;   返回;   }   而(t)   {   如果(t→key>=num)   {   问:接下来,=p;   未来=t p→;   返回;   }   其他的   {   q=t;   t=t→下;   }   }   问:接下来,=p;   }   bool删除(int num)   {   如果(头==NULL)   {   cout<& lt;“链接为空!”& lt; & lt; endl;   返回0;   }   LinkNode * p=头,* t=头→下;   如果(p→键==num)   {   头=头→下;   删除p;   长度,;   返回1;   }   而(t)   {   如果(t→键==num)   {   下=t p→→下;   删除t;   长度,;   返回1;   }   else if (t→key之前      

,散列。h
  

  

哈希表中每一个元素存储一个链表
  

        # include“Link.h”   类散列   {   私人:   链接*表;   公众:   散列(int num):表(新链接(num)) {}   ~ Hash ()   {   删除表[];   }//除法散列法   num int H1 (int, int)   {   返回num % m;   }//乘法散列法   int H2 (int num,浮动,int m)   {   num浮动fnum=(浮动);   浮动re=((fnum *) - (int) (fnum *)) * m;   返回(int)再保险;   }//全域散列   num int H3 (int, int, int)   {   int a、b;=rand () % p;   b=rand () % p;   返回((a * num + b) % p) % m;   }   插入空白(全国矿工工会int, int n)   {   int的关键;      如果(n==1)   {   关键=H1 (num, 17);   }   else if (n==2)   {   关键=H2 (num, 0.618033, 17);   }   其他的   {   关键=H3 (num, 701, 17);   }   表(例子).Insert (num);   }   bool删除(全国矿工工会int, int n)   {   int的关键;   如果(n==1)   {   关键=H1 (num, 17);   }   else if (n==2)   {   关键=H2 (num, 0.618033, 17);   }   其他的   {   关键=H3 (num, 701, 17);   }   返回表(例子)delete (num);   }   int搜索(全国矿工工会int, int n)   {   int的关键;      如果(n==1)   {   关键=H1 (num, 17);   }   else if (n==2)   {   关键=H2 (num, 0.618033, 17);   }   其他的   {   关键=H3 (num, 701, 17);   }   如果(表(例子).Search (num) !=0)   {   返回键+ 1;   }   其他的   返回1;   }   空白打印(int num)   {   int我;   (i=0; i< num;我+ +)   {   如果(表[我].IsEmpty ())   继续;   表[我].Print(我);   }   }   };      

c++实现哈希表的实例