#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の