アルゴリズムとデータ構造 補足資料 14-2 「ダイレクトチェイニング法」
DESCRIPTION
アルゴリズムとデータ構造 補足資料 14-2 「ダイレクトチェイニング法」. 横浜国立大学 理工 学部 数物・電子情報系学科 富井尚志. 外部 ハッシュ法. サンプルプログラム: directchaining.c ダイレクトチェイニング法 /外部ハッシュ法 指定された ID に対してハッシュ値を作成 アイテムは要素リストに格納される ハッシュ表はリスト先頭を保持 格納できる長さに制限がない 挿入:ハッシュ値衝突の際は 要素リスト の先頭にアイテムを追加する 削除:ハッシュ値からハッシュ表を特定し、要素リストから削除する - PowerPoint PPT PresentationTRANSCRIPT
アルゴリズムとデータ構造補足資料 14-2「ダイレクトチェイニング法」
横浜国立大学理工学部 数物・電子情報系学科富井尚志
外部ハッシュ法サンプルプログラム: directchaining.c
• ダイレクトチェイニング法/外部ハッシュ法• 指定された ID に対してハッシュ値を作成• アイテムは要素リストに格納される• ハッシュ表はリスト先頭を保持• 格納できる長さに制限がない• 挿入:ハッシュ値衝突の際は要素リストの先頭にアイテムを追加する• 削除:ハッシュ値からハッシュ表を特定し、要素リストから削除する• 探索:ハッシュ表の特定は O(1) だが、リストの探索に O(N/B) を要する
– 表の埋まり具合にゆとりを持たせる (N << B) と、 O(1) に近くなる
ダイレクトチェイニング法開始前
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0]
hashtable[ 1]
hashtable[ 2]
hashtable[ 3]
hashtable[ 4]
hashtable[ 5]
hashtable[ 6]
hashtable[ 7]
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11]
hashtable[12]
jname:ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
↑ ハッシュ表: 同じハッシュ値をもつアイテムへのポインタ配列
←x: ファイルから取り出したレコード 1 件を保持←dummy: ダミーのデータ(重複キーを持つ)
ダイレクトチェイニング法ハッシュ表初期化
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0] NULL
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4] NULL
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8] NULL
hashtable[ 9] NULL
hashtable[10] NULL
hashtable[11] NULL
hashtable[12] NULL
jname:ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
ダイレクトチェイニング法レコード 1 件目取り出し
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0] NULL
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4] NULL
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8] NULL
hashtable[ 9] NULL
hashtable[10] NULL
hashtable[11] NULL
hashtable[12] NULL
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
ダイレクトチェイニング法レコード 1 件目ハッシュ関数計算
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0] NULL
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4] NULL
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8] NULL
hashtable[ 9] NULL
hashtable[10] NULL
hashtable[11] NULL
hashtable[12] NULL
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
hash(“Yokohama Kunihiro”) = 8
ダイレクトチェイニング法レコード 1 件目ハッシュ表へ登録
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0] NULL
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4] NULL
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9] NULL
hashtable[10] NULL
hashtable[11] NULL
hashtable[12] NULL
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
hash(“Yokohama Kunihiro”) = 8
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
ダイレクトチェイニング法レコード 2 件目取り出し
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0] NULL
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4] NULL
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9] NULL
hashtable[10] NULL
hashtable[11] NULL
hashtable[12] NULL
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
ダイレクトチェイニング法レコード 2 件目ハッシュ関数計算
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0] NULL
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4] NULL
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9] NULL
hashtable[10] NULL
hashtable[11] NULL
hashtable[12] NULL
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
hash(“Kanagawa Hanako”) = 4jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
ダイレクトチェイニング法レコード 2 件目ハッシュ表へ登録
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0] NULL
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9] NULL
hashtable[10] NULL
hashtable[11] NULL
hashtable[12] NULL
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
hash(“Kanagawa Hanako”) = 4jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
ダイレクトチェイニング法レコード 3 件目取り出し
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0] NULL
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9] NULL
hashtable[10] NULL
hashtable[11] NULL
hashtable[12] NULL
jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
ダイレクトチェイニング法レコード 3 件目ハッシュ関数計算
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0] NULL
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9] NULL
hashtable[10] NULL
hashtable[11] NULL
hashtable[12] NULL
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
hash(“Hato Saburo”) = 8
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
ダイレクトチェイニング法レコード 3 件目ハッシュ表へ登録
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0] NULL
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9] NULL
hashtable[10] NULL
hashtable[11] NULL
hashtable[12] NULL
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
hash(“Hato Saburo”) = 8jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
id: Hato Saburo hash: 8
next:
ダイレクトチェイニング法レコード 4 件目取り出し
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0] NULL
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9] NULL
hashtable[10] NULL
hashtable[11] NULL
hashtable[12] NULL
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
id: Hato Saburo hash: 8
next:
ダイレクトチェイニング法レコード 4 件目ハッシュ関数計算
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0] NULL
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9] NULL
hashtable[10] NULL
hashtable[11] NULL
hashtable[12] NULL
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
hash(“Hojo Umeko”) = 9
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
id: Hato Saburo hash: 8
next:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
ダイレクトチェイニング法レコード 4 件目ハッシュ表へ登録
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0] NULL
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10] NULL
hashtable[11] NULL
hashtable[12] NULL
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
id: Hato Saburo hash: 8
next:
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
hash(“Hojo Umeko”) = 9jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
ダイレクトチェイニング法レコード 5 件目取り出し
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0] NULL
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10] NULL
hashtable[11] NULL
hashtable[12] NULL
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
id: Hato Saburo hash: 8
next:
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
ダイレクトチェイニング法レコード 5 件目ハッシュ関数計算
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0] NULL
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10] NULL
hashtable[11] NULL
hashtable[12] NULL
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
hash(“Ashigara Kintaro”) = 0
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
id: Hato Saburo hash: 8
next:
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
ダイレクトチェイニング法レコード 5 件目ハッシュ表へ登録
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10] NULL
hashtable[11] NULL
hashtable[12] NULL
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
id: Hato Saburo hash: 8
next:
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
hash(“Ashigara Kintaro”) = 0jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
ダイレクトチェイニング法レコード 6 件目取り出し
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10] NULL
hashtable[11] NULL
hashtable[12] NULL
jname: 上野蘭々ename: Ueno Ranran
addr : 台東区上野公園
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
id: Hato Saburo hash: 8
next:
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
ダイレクトチェイニング法レコード 6 件目ハッシュ関数計算
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10] NULL
hashtable[11] NULL
hashtable[12] NULL
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
hash(“Ueno Ranran”) = 9
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
id: Hato Saburo hash: 8
next:
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
jname: 上野蘭々ename: Ueno Ranran
addr : 台東区上野公園
ダイレクトチェイニング法レコード 6 件目ハッシュ表へ登録
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10] NULL
hashtable[11] NULL
hashtable[12] NULL
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
id: Hato Saburo hash: 8
next:
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
hash(“Ueno Ranran”) = 9jname: 上野蘭々ename: Ueno Ranran
addr : 台東区上野公園
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 上野蘭々ename: Ueno Ranran
addr : 台東区上野公園
id: Ueno Ranran hash: 9
next:
ダイレクトチェイニング法レコード 7 件目取り出し
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10] NULL
hashtable[11] NULL
hashtable[12] NULL
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
id: Hato Saburo hash: 8
next:
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 上野蘭々ename: Ueno Ranran
addr : 台東区上野公園
id: Ueno Ranran hash: 9
next:
ダイレクトチェイニング法レコード 7 件目ハッシュ関数計算
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10] NULL
hashtable[11] NULL
hashtable[12] NULL
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
hash(“Mitsuki Mausu”) = 10
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
id: Hato Saburo hash: 8
next:
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 上野蘭々ename: Ueno Ranran
addr : 台東区上野公園
id: Ueno Ranran hash: 9
next:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
ダイレクトチェイニング法レコード 7 件目ハッシュ表へ登録
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
id: Hato Saburo hash: 8
next:
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 上野蘭々ename: Ueno Ranran
addr : 台東区上野公園
id: Ueno Ranran hash: 9
next:
hash(“Mitsuki Mausu”) = 10jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
ダイレクトチェイニング法レコード 8 件目取り出し
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: 野比寅右衛門ename: Nobi Toraemon
addr : 横須賀市野比
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
id: Hato Saburo hash: 8
next:
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 上野蘭々ename: Ueno Ranran
addr : 台東区上野公園
id: Ueno Ranran hash: 9
next:
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
ダイレクトチェイニング法レコード 8 件目ハッシュ関数計算
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
hash(“Nobi Toraemon”) = 0
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
id: Hato Saburo hash: 8
next:
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 上野蘭々ename: Ueno Ranran
addr : 台東区上野公園
id: Ueno Ranran hash: 9
next:
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
jname: 野比寅右衛門ename: Nobi Toraemon
addr : 横須賀市野比
ダイレクトチェイニング法レコード 8 件目ハッシュ表へ登録
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
id: Hato Saburo hash: 8
next:
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 上野蘭々ename: Ueno Ranran
addr : 台東区上野公園
id: Ueno Ranran hash: 9
next:
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
hash(“Nobi Toraemon”) = 0jname: 野比寅右衛門ename: Nobi Toraemon
addr : 横須賀市野比data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 野比寅右衛門ename: Nobi Toraemon
addr : 横須賀市野比
id: Nobi Toraemon hash: 0
next:
ダイレクトチェイニング法登録後
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
id: Hato Saburo hash: 8
next:
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 上野蘭々ename: Ueno Ranran
addr : 台東区上野公園
id: Ueno Ranran hash: 9
next:
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
data:
jname: 野比寅右衛門ename: Nobi Toraemon
addr : 横須賀市野比
id: Nobi Toraemon hash: 0
next:hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
↑ ハッシュ表の状態が印刷される
ダイレクトチェイニング法重複データ登録の試み
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
id: Hato Saburo hash: 8
next:
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 上野蘭々ename: Ueno Ranran
addr : 台東区上野公園
id: Ueno Ranran hash: 9
next:
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
data:
jname: 野比寅右衛門ename: Nobi Toraemon
addr : 横須賀市野比
id: Nobi Toraemon hash: 0
next:hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
ダイレクトチェイニング法重複データ登録の試み
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
id: Hato Saburo hash: 8
next:
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 上野蘭々ename: Ueno Ranran
addr : 台東区上野公園
id: Ueno Ranran hash: 9
next:
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
data:
jname: 野比寅右衛門ename: Nobi Toraemon
addr : 横須賀市野比
id: Nobi Toraemon hash: 0
next:hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
“Yokohama Kunihiro” は、すでに登録されているので登録拒否
hash(“Yokohama Kunihiro”) = 8
ダイレクトチェイニング法探索 1
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
id: Hato Saburo hash: 8
next:
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 上野蘭々ename: Ueno Ranran
addr : 台東区上野公園
id: Ueno Ranran hash: 9
next:
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
data:
jname: 野比寅右衛門ename: Nobi Toraemon
addr : 横須賀市野比
id: Nobi Toraemon hash: 0
next:hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
found <(8) Hato Saburo 鳩三郎 鎌倉市小町 >ハッシュ値 8 をもつリストを探索すれば見つかる
hash(“Hato Saburo”) = 8
ダイレクトチェイニング法探索 2
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
id: Hato Saburo hash: 8
next:
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 上野蘭々ename: Ueno Ranran
addr : 台東区上野公園
id: Ueno Ranran hash: 9
next:
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
data:
jname: 野比寅右衛門ename: Nobi Toraemon
addr : 横須賀市野比
id: Nobi Toraemon hash: 0
next:hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
found <(8) Yokohama Kunihiro 横浜国大 横浜市保土ヶ谷区常盤台 >同じハッシュ値をもつ場合には、リスト内を順次探索する
hash(“Yokohama Kunihiro”) = 8
ダイレクトチェイニング法削除 1
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
id: Hato Saburo hash: 8
next:
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 上野蘭々ename: Ueno Ranran
addr : 台東区上野公園
id: Ueno Ranran hash: 9
next:
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
data:
jname: 野比寅右衛門ename: Nobi Toraemon
addr : 横須賀市野比
id: Nobi Toraemon hash: 0
next:hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
ダイレクトチェイニング法削除 1: 探索
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 鳩三郎ename: Hato Saburo
addr : 鎌倉市小町
id: Hato Saburo hash: 8
next:
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 上野蘭々ename: Ueno Ranran
addr : 台東区上野公園
id: Ueno Ranran hash: 9
next:
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
data:
jname: 野比寅右衛門ename: Nobi Toraemon
addr : 横須賀市野比
id: Nobi Toraemon hash: 0
next:hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
hash(“Hato Saburo”) = 8
ダイレクトチェイニング法削除 1: リストからの削除
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 上野蘭々ename: Ueno Ranran
addr : 台東区上野公園
id: Ueno Ranran hash: 9
next:
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
data:
jname: 野比寅右衛門ename: Nobi Toraemon
addr : 横須賀市野比
id: Nobi Toraemon hash: 0
next:hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
hash(“Hato Saburo”) = 8
ダイレクトチェイニング法削除 2
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 上野蘭々ename: Ueno Ranran
addr : 台東区上野公園
id: Ueno Ranran hash: 9
next:
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
data:
jname: 野比寅右衛門ename: Nobi Toraemon
addr : 横須賀市野比
id: Nobi Toraemon hash: 0
next:hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
ダイレクトチェイニング法削除 2: 探索
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 上野蘭々ename: Ueno Ranran
addr : 台東区上野公園
id: Ueno Ranran hash: 9
next:
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
data:
jname: 野比寅右衛門ename: Nobi Toraemon
addr : 横須賀市野比
id: Nobi Toraemon hash: 0
next:hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
hash(“Ueno Ranran”) = 9
ダイレクトチェイニング法削除 2: リストからの削除
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
data:
jname: 野比寅右衛門ename: Nobi Toraemon
addr : 横須賀市野比
id: Nobi Toraemon hash: 0
next:hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
hash(“Ueno Ranran”) = 9
ダイレクトチェイニング法削除 3
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
data:
jname: 野比寅右衛門ename: Nobi Toraemon
addr : 横須賀市野比
id: Nobi Toraemon hash: 0
next:hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
ダイレクトチェイニング法削除 3: 探索
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
data:
jname: 野比寅右衛門ename: Nobi Toraemon
addr : 横須賀市野比
id: Nobi Toraemon hash: 0
next:hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
hash(“Nobi Toraemon”) = 0
ダイレクトチェイニング法削除 3: リストからの削除
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
hash(“Nobi Toraemon”) = 0
ダイレクトチェイニング法削除 4
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
ダイレクトチェイニング法削除 4: 探索
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
hash(“Nanashi Gonbei”) = 8
特定されたハッシュ値からリストを探索したが、発見できなかった
ダイレクトチェイニング法削除 5
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
ダイレクトチェイニング法削除 5: 探索
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 横浜国大ename: Yokohama Kunihiro
addr : 横浜市保土ヶ谷区常盤台
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
hash(“Yokohama Kunihiro”) = 8
ダイレクトチェイニング法削除 5: リストからの削除
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8] NULL
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
hash(“Yokohama Kunihiro”) = 8
※ 削除されたのは、同じキーを持った要素だったことに注意
ダイレクトチェイニング法削除後
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8] NULL
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
ダイレクトチェイニング法探索
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8] NULL
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
hash(“Hato Saburo”) = 8hash(“Yokohama Kunihiro”) = 8
どちらもハッシュ表を参照するだけで、存在しないことが分かる
ダイレクトチェイニング法挿入
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8] NULL
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
hash(“Yokohama Kunihiro”) = 8
今回挿入するレコードの内容は、 dummy に書かれている内容であることに注意
ダイレクトチェイニング法挿入
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
hash(“Yokohama Kunihiro”) = 8
今回挿入するレコードの内容は、 dummy に書かれている内容であることに注意
data:
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
id: Yokohama Kunihiro hash: 8
next: NULL
ダイレクトチェイニング法挿入後
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
今回挿入するレコードの内容は、 dummy に書かれている内容であることに注意
data:
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
id: Yokohama Kunihiro hash: 8
next: NULL
ダイレクトチェイニング法探索 1
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULL
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
hashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
data:
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
id: Yokohama Kunihiro hash: 8
next: NULL
hash(“Yokohama Kunihiro”) = 8
found <(8) Yokohama Kunihiro 横浜邦博 横浜市中区日本大通 >今度の結果は、先ほど新たに挿入されたデータであることに注意
ダイレクトチェイニング法終了直前の状態
/* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable);
/* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x.ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy.ename, hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy.ename, hashtable); printhashtable(hashtable);
/* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy.ename, hashtable);
/* 再登録・再探索 */ printf("===Re-insert===\n"); insert(&dummy, dummy.ename, hashtable); printsearch(dummy.ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable);
data:
jname: 神奈川花子ename: Kanagawa Hanako
addr : 横浜市神奈川区三ッ沢上町
id: Kanagawa Hanako hash: 4
next: NULL
data:
jname: 北条梅子ename: Hojo Umeko
addr : 小田原市城山
id: Hojo Umeko hash: 9
next: NULL
data:
jname: 足柄金太郎ename: Ashigara Kintaro
addr : 南足柄市金時山
id: Ashigara Kintaro hash: 0
next: NULLhashtable[ 0]
hashtable[ 1] NULL
hashtable[ 2] NULL
hashtable[ 3] NULL
hashtable[ 4]
hashtable[ 5] NULL
hashtable[ 6] NULL
hashtable[ 7] NULL
hashtable[ 8]
hashtable[ 9]
hashtable[10]
hashtable[11] NULL
hashtable[12] NULL
jname: ename:
addr :
struct record x
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
struct record dummystruct item *hashtable[B]
data:
jname: 横浜邦博ename: Yokohama Kunihiro
addr : 横浜市中区日本大通
id: Yokohama Kunihiro hash: 8
next: NULL
data:
jname: 三月磨臼ename: Mitsuki Mausu
addr : 浦安市舞浜
id: Mitsuki Mausu hash: 10
next: NULL
まとめ •動的データ管理: 探索、挿入、削除• ハッシュ表の該当箇所を見つけるには、 O(1) : 登録済みのデータ件数には依存しない• ハッシュ表の要素リストの中からアイテムを見つけるには、リストの要素数に依存 O( N/B ) ( 平均 )