C ++のヘッダファイルハッシュテーブル

#ifndefの_HASHTABLE_H_
 の#define _HASHTABLE_H_ 
する#include <iostreamの> 
の#include <cstdlib>
 使用して 名前空間はstd; 

typedefを
列挙{ 
    空、アクティブ、削除
} kindofitem。

typedefは構造体
{ 
    int型のキー。
}データ・タイプ; 

typedefは構造体{ 
    データ型のデータ、
    kindofitem情報; 
} hashitem。

typedefは構造体{ 
    hashitemの *のARR。
    int型のTABLE_SIZE。
    int型のcurrent_size。
}ハッシュ表; 

int型開始(Hashtableのハッシュ*、int型のサイズ); //は、ハッシュテーブルを初期化
int型、検索(* Hashtableのハッシュ、データ型のX)// 要素のx対応するキーワードの検索
int型の INSERTを(* Hashtableのハッシュ、データ型のX); // 同様にハッシュテーブルの配列要素Xに挿入し、それはキーワードに対応して設けられている
INT削除(ハッシュハッシュテーブル*、データ型のX); //は、ハッシュテーブルからのXのデータ要素を削除する
無効破壊(ハッシュハッシュテーブル*); // 元に戻す機能を
/ * 
INTメイン()
{ 

システム( "PAUSE"); 
0を返す; 
} 
* / 
int型開始(ハッシュのハッシュテーブルの*、int型のサイズ)
{ 
    ハッシュ - > ARR =(hashitem *)のmallocをsizeof(hashitem)*サイズ); // 初期化配列 
    ハッシュ・> TABLE_SIZE = サイズ;
     IF(ハッシュ・>はARR == NULL)
    { 
        COUTは、 << " 初期化失敗" << ENDL;
         戻り 0 ; 
    } 
    他の
    { 
        ハッシュ - > current_size = 0 ;
         リターン 1 ; 
    } 
} 

int型の検索(* Hashtableのハッシュ、データ型のX)// 検索キーワードに対応する要素x 
{
     INT I = x.key%ハッシュ・> TABLE_SIZE;
     INT= J I;
     一方(アクティブ&&ハッシュ・> ARR [J] = .data.keyの.infoハッシュ・> ARR [J] ==!x.key)
    { 
        J =(J + 1)・ハッシュ・> TABLE_SIZE; // とこの方法は、ハッシュ衝突を見つけるために続け
        IF(J == I)
        { 
            COUT << " このハッシュテーブルが見つからないトラバース" << ENDLと、
             戻り -hash-> TABLE_SIZE; 
        } 
    } 
    IF(ハッシュ・> ARR [J]。 ==情報アクティブ)
    { 
        返すJを; 
    } 
    {
         リターン - J。
    } 
} 

int型(ハッシュテーブル*挿入ハッシュ、データ型Xの)
{ 
    int型 I = 見つける(ハッシュ、X)。
    もし(I> 0 
    { 
        coutの << " 该数据元素已经存在了!" << てendl;
        リターン 0 ; 
    } 

    そう であれば(I = -hash->!TABLE_SIZE)
    { 
        ハッシュ - > ARR [-i] .DATAの=のX。
        ハッシュ - > ARR [-i]の.info = アクティブ; 
        ハッシュ - > current_size ++ ;
        リターン 1 ;
    } 
    {
         戻り 0 ; 
    } 
} 

int型(ハッシュテーブル*削除ハッシュ、データ型X)
{ 
    int型 I = 見つける(ハッシュ、X)。
    もし(I> 0 
    { 
        ハッシュ - > [I]の.info = ARR 削除。
        ハッシュ - > current_size-- リターン 1 ; 
    } 
    { 
        裁判所未満 << " 没有这个元素、无法删除!" << てendl;
        リターン 0 ; 
    } 
} 

のボイド(ハッシュテーブル*破壊ハッシュ)
{ 
    削除 []ハッシュ・> ARR。
} 
#endifの


 

おすすめ

転載: www.cnblogs.com/yangmenda/p/11728151.html