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