ハッシュベース:解決ハッシュ衝突にジッパー方法

ジッパー方法:線形リストでは、この線形リスト・アドレスが一意のすべてのストレージのそのハッシュ同義語によって同定しました。頻繁に挿入および削除操作の場合にも適用します。

コードとコメント:

1つの#include " のiostream " 
2の#include " ベクター" 
3。の#include <TIME.H>
 4。 使用した 名前空間STD;
 5  
。6  // ファスナー方法
。7  
。8  構造体   ListNode           // ノードが単一のリンクリストで構成され、ハッシュテーブル配列インデックスは、キー値を見つけるために割り当てられたポインタのセット、
9。 {
 10      INT ヴァル;
 11。     構造体 ListNode * 次、
 12である      ListNode(INT X):ヴァル(X)、次の(NULL){}
 13である };
 14  
15  のint hash_func (int型のキーは、INTは table_len){     // 新しい方法は、キー値に対して、ハッシュの配列の長さが引き継がれる
16      リターンキー%table_len;
 17  }
 18である 
。19  ボイド INSERT(ListNode hash_table * []、ListNodeノード*、INT table_len) {    // 挿入方法は、第1の補間方法であって、
20      INT HASH_KEY = hash_func(ノード- > ヴァル、table_len);
 21である      ノード- >次に= hash_table [HASH_KEY]; 22である      hash_table [HASH_KEY] = ノードと、  23である }
 24  
25  BOOL検索(ListNode hash_table * []、int型ヴァル、int型table_len){     // 挿入アイデアはほぼ同じである見つけるための方法
26である     INT HASH_KEY hash_func =(ヴァル、table_len);                     // ノードのみが挿入され、唯一の値を見つけるために検索するための
27      ListNodeヘッド* = hash_table [ HASH_KEY];
 28      ながら(ヘッド){
 29          IF(頭部> ==ヴァルヴァル)
 30          {
 31が             リターン trueに;
 32          }
 33が          ヘッド=頭部> 次に、
 34である     }
 35      リターン falseに;
 36  }
 37  
38である // 試験。
39 int型のmain(){
 40      CONST  INT TABLE_LEN = 11 ;       // 素数、比較的小さな衝突であろうと見なさ
41である      * hash_table [TABLE_LEN] {= ListNode 0 };      // ポインタ・アレイ
42は      ベクトル<* ListNode> ; hash_node_vec
 43である     INT試験[ 8 ] = { 0 };
 44であり      ; srand関数(時間(NULL))              // 無作為の数10に8時間を発生
45      INT I = 0 ;私は< 8は、I ++ ){
 46が          試験[I] = RAND() %10;
47      }
 48      のためにINTは iは= 0 ; I < 8 ; I ++ ){
 49          hash_node_vec.push_back(新しいListNode(試験[I]))。
50      }
 51      のためにINTは iは= 0 ; I <hash_node_vec.size(); I ++ ){
 52          インサート(hash_table、hash_node_vec [i]は、TABLE_LEN)。
53      }
 54      のprintf(" ハッシュテーブル:\ n " );
55      のためのint型 I = 0; I <TABLE_LEN。I ++ ){
 56          のprintf(" [%のD]:" 、I)。
57          ListNode *ヘッド= hash_table [I]。
58          一方(ヘッド){
 59              のprintf(" - >%D "、頭部> ヴァル)
60              ヘッド=頭部> 次。
61          }
 62          のprintf(" \ n " );
63      }
 64      のprintf(" \ n " );
65      のprintf(" テスト検索:" );
 66      INT iは= 0 ; I < 10 ; I ++ ){
 67          であれば(検索(hash_table、I、TABLE_LEN)){
 68              のprintf(" %dはハッシュテーブルにある\ N。" 、I)。
 69          }
 70          {
 71              のprintf(" %dはハッシュテーブルにない\ N。" 、I);
 72          }
 73      }
 74      システム(" 一時停止" );
 75      リターン 0;
76 }

 前進する一歩一歩、やりがい、キープ静かが常にある。2020年3月20日

おすすめ

転載: www.cnblogs.com/ccllcc/p/12533353.html
おすすめ