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