1 / 54

アルゴリズムとデータ構造 補足資料 14-2 「ダイレクトチェイニング法」

アルゴリズムとデータ構造 補足資料 14-2 「ダイレクトチェイニング法」. 横浜国立大学 理工 学部 数物・電子情報系学科 富井尚志. 外部 ハッシュ法. サンプルプログラム: directchaining.c ダイレクトチェイニング法 /外部ハッシュ法 指定された ID に対してハッシュ値を作成 アイテムは要素リストに格納される ハッシュ表はリスト先頭を保持 格納できる長さに制限がない 挿入:ハッシュ値衝突の際は 要素リスト の先頭にアイテムを追加する 削除:ハッシュ値からハッシュ表を特定し、要素リストから削除する

denna
Download Presentation

アルゴリズムとデータ構造 補足資料 14-2 「ダイレクトチェイニング法」

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. アルゴリズムとデータ構造補足資料14-2「ダイレクトチェイニング法」アルゴリズムとデータ構造補足資料14-2「ダイレクトチェイニング法」 横浜国立大学 理工学部 数物・電子情報系学科 富井尚志

  2. 外部ハッシュ法 サンプルプログラム:directchaining.c • ダイレクトチェイニング法/外部ハッシュ法 • 指定されたIDに対してハッシュ値を作成 • アイテムは要素リストに格納される • ハッシュ表はリスト先頭を保持 • 格納できる長さに制限がない • 挿入:ハッシュ値衝突の際は要素リストの先頭にアイテムを追加する • 削除:ハッシュ値からハッシュ表を特定し、要素リストから削除する • 探索:ハッシュ表の特定はO(1)だが、リストの探索にO(N/B)を要する • 表の埋まり具合にゆとりを持たせる(N << B)と、O(1)に近くなる

  3. ダイレクトチェイニング法開始前 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: 横浜市中区日本大通

  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] 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: 横浜市中区日本大通

  5. ダイレクトチェイニング法レコード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: 横浜市中区日本大通

  6. ダイレクトチェイニング法レコード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: 横浜市中区日本大通

  7. ダイレクトチェイニング法レコード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

  8. ダイレクトチェイニング法レコード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

  9. ダイレクトチェイニング法レコード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

  10. ダイレクトチェイニング法レコード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

  11. ダイレクトチェイニング法レコード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

  12. ダイレクトチェイニング法レコード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

  13. ダイレクトチェイニング法レコード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:

  14. ダイレクトチェイニング法レコード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:

  15. ダイレクトチェイニング法レコード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

  16. ダイレクトチェイニング法レコード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:

  17. ダイレクトチェイニング法レコード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

  18. ダイレクトチェイニング法レコード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:

  19. ダイレクトチェイニング法レコード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

  20. ダイレクトチェイニング法レコード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

  21. ダイレクトチェイニング法レコード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

  22. ダイレクトチェイニング法レコード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:

  23. ダイレクトチェイニング法レコード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:

  24. ダイレクトチェイニング法レコード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

  25. ダイレクトチェイニング法レコード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

  26. ダイレクトチェイニング法レコード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

  27. ダイレクトチェイニング法レコード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

  28. ダイレクトチェイニング法レコード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:

  29. ダイレクトチェイニング法登録後 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: ↑ハッシュ表の状態が印刷される

  30. ダイレクトチェイニング法重複データ登録の試みダイレクトチェイニング法重複データ登録の試み 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:

  31. ダイレクトチェイニング法重複データ登録の試みダイレクトチェイニング法重複データ登録の試み 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” は、すでに登録されているので登録拒否

  32. ダイレクトチェイニング法探索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をもつリストを探索すれば見つかる

  33. ダイレクトチェイニング法探索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横浜国大 横浜市保土ヶ谷区常盤台> 同じハッシュ値をもつ場合には、リスト内を順次探索する

  34. ダイレクトチェイニング法削除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:

  35. ダイレクトチェイニング法削除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:

  36. ダイレクトチェイニング法削除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

  37. ダイレクトチェイニング法削除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

  38. ダイレクトチェイニング法削除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

  39. ダイレクトチェイニング法削除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

  40. ダイレクトチェイニング法削除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

  41. ダイレクトチェイニング法削除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

  42. ダイレクトチェイニング法削除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

  43. ダイレクトチェイニング法削除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

  44. ダイレクトチェイニング法削除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 特定されたハッシュ値からリストを探索したが、発見できなかった

  45. ダイレクトチェイニング法削除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

  46. ダイレクトチェイニング法削除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

  47. ダイレクトチェイニング法削除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 ※削除されたのは、同じキーを持った要素だったことに注意

  48. ダイレクトチェイニング法削除後 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

  49. ダイレクトチェイニング法探索 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 どちらもハッシュ表を参照するだけで、存在しないことが分かる

  50. ダイレクトチェイニング法挿入 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に書かれている内容であることに注意

More Related