struct record x ename jname addr struct record

  • Slides: 87
Download presentation

オープンアドレッシング法 開始前 struct record x ename: jname: addr : struct record dummy ←x: ファイルから取り出したレコード1件を保持

オープンアドレッシング法 開始前 struct record x ename: jname: addr : struct record dummy ←x: ファイルから取り出したレコード1件を保持 ←dummy: ダミーのデータ(重複キーを持つ) ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 struct item hashtable[B] hashtable[ 0] hashtable[ 4] hashtable[ 1] hashtable[ 5] hashtable[ 2] hashtable[ 6] hashtable[ 3] hashtable[ 7] hashtable[ 8] /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); hashtable[ 9] /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] hashtable[11] /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] ↑ハッシュ表: アイテムの実体を      B個格納可能

struct record x ename: jname: addr : オープンアドレッシング法 ハッシュ表初期化 struct record dummy ename: Yokohama

struct record x ename: jname: addr : オープンアドレッシング法 ハッシュ表初期化 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: ***EMPTY*** hashtable[ 4] id: ***EMPTY*** hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: ***EMPTY*** hashtable[ 9] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: ***EMPTY*** hashtable[11] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: ***EMPTY***

struct record x ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 オープンアドレッシング法 レコード1件目取り出し struct

struct record x ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 オープンアドレッシング法 レコード1件目取り出し struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: ***EMPTY*** hashtable[ 4] id: ***EMPTY*** hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: ***EMPTY*** hashtable[ 9] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: ***EMPTY*** hashtable[11] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: ***EMPTY***

オープンアドレッシング法 レコード1件目ハッシュ関数計算 struct record x ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hash(“Yokohama

オープンアドレッシング法 レコード1件目ハッシュ関数計算 struct record x ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hash(“Yokohama Kunihiro”) = 8 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: ***EMPTY*** hashtable[ 4] id: ***EMPTY*** hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: ***EMPTY*** hashtable[ 9] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: ***EMPTY*** hashtable[11] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: ***EMPTY***

オープンアドレッシング法 レコード1件目ハッシュ表へ登録 struct record x ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hash(“Yokohama

オープンアドレッシング法 レコード1件目ハッシュ表へ登録 struct record x ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hash(“Yokohama Kunihiro”) = 8 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: ***EMPTY*** hashtable[ 4] id: ***EMPTY*** hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: ***EMPTY*** hashtable[11] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: ***EMPTY***

struct record x ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 オープンアドレッシング法 レコード2件目取り出し struct

struct record x ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 オープンアドレッシング法 レコード2件目取り出し struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: ***EMPTY*** hashtable[ 4] id: ***EMPTY*** hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: ***EMPTY*** hashtable[11] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: ***EMPTY***

オープンアドレッシング法 レコード2件目ハッシュ関数計算 struct record x ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hash(“Kanagawa

オープンアドレッシング法 レコード2件目ハッシュ関数計算 struct record x ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hash(“Kanagawa Hanako”) = 4 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: ***EMPTY*** hashtable[ 4] id: ***EMPTY*** hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: ***EMPTY*** hashtable[11] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: ***EMPTY***

オープンアドレッシング法 レコード2件目ハッシュ表へ登録 struct record x ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hash(“Kanagawa

オープンアドレッシング法 レコード2件目ハッシュ表へ登録 struct record x ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hash(“Kanagawa Hanako”) = 4 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: ***EMPTY*** hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: ***EMPTY*** hashtable[11] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: ***EMPTY***

struct record x ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 オープンアドレッシング法 レコード3件目取り出し struct

struct record x ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 オープンアドレッシング法 レコード3件目取り出し struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: ***EMPTY*** hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: ***EMPTY*** hashtable[11] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: ***EMPTY***

オープンアドレッシング法 レコード3件目ハッシュ関数計算 struct record x ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hash(“Hato

オープンアドレッシング法 レコード3件目ハッシュ関数計算 struct record x ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hash(“Hato Saburo”) = 8 → すでに埋まっている(衝突) struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: ***EMPTY*** hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: ***EMPTY*** hashtable[11] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: ***EMPTY***

struct record x ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 オープンアドレッシング法 レコード3件目ハッシュ関数再計算 hash(“Hato

struct record x ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 オープンアドレッシング法 レコード3件目ハッシュ関数再計算 hash(“Hato Saburo”) = 8 → すでに埋まっている(衝突) rehash(“Hato Saburo”, 1) = 9 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: ***EMPTY*** hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: ***EMPTY*** hashtable[11] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: ***EMPTY***

オープンアドレッシング法 レコード3件目ハッシュ表へ登録 struct record x ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hash(“Hato

オープンアドレッシング法 レコード3件目ハッシュ表へ登録 struct record x ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hash(“Hato Saburo”) = 8 rehash(“Hato Saburo”, 1) = 9 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: ***EMPTY*** hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: ***EMPTY*** hashtable[11] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: ***EMPTY***

struct record x ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 オープンアドレッシング法 レコード4件目取り出し struct

struct record x ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 オープンアドレッシング法 レコード4件目取り出し struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: ***EMPTY*** hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: ***EMPTY*** hashtable[11] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: ***EMPTY***

オープンアドレッシング法 レコード4件目ハッシュ関数計算 struct record x ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hash(“Hojo

オープンアドレッシング法 レコード4件目ハッシュ関数計算 struct record x ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hash(“Hojo Umeko”) = 9 → すでに埋まっている(衝突) struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: ***EMPTY*** hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: ***EMPTY*** hashtable[11] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: ***EMPTY***

struct record x ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 オープンアドレッシング法 レコード4件目ハッシュ関数再計算 hash(“Hojo

struct record x ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 オープンアドレッシング法 レコード4件目ハッシュ関数再計算 hash(“Hojo Umeko”) = 9 → すでに埋まっている(衝突) rehash(“Hojo Umeko”, 1) = 10 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: ***EMPTY*** hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: ***EMPTY*** hashtable[11] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: ***EMPTY***

オープンアドレッシング法 レコード4件目ハッシュ表へ登録 struct record x ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hash(“Hojo

オープンアドレッシング法 レコード4件目ハッシュ表へ登録 struct record x ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hash(“Hojo Umeko”) = 9 → すでに埋まっている(衝突) rehash(“Hojo Umeko”, 1) = 10 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: ***EMPTY*** hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: ***EMPTY***

struct record x ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 オープンアドレッシング法 レコード5件目取り出し struct

struct record x ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 オープンアドレッシング法 レコード5件目取り出し struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: ***EMPTY*** hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: ***EMPTY***

オープンアドレッシング法 レコード5件目ハッシュ関数計算 struct record x ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hash(“Ashigara

オープンアドレッシング法 レコード5件目ハッシュ関数計算 struct record x ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hash(“Ashigara Kintaro”) = 0 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: ***EMPTY*** hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: ***EMPTY***

オープンアドレッシング法 レコード5件目ハッシュ表へ登録 struct record x ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hash(“Ashigara

オープンアドレッシング法 レコード5件目ハッシュ表へ登録 struct record x ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hash(“Ashigara Kintaro”) = 0 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: ***EMPTY***

struct record x ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 オープンアドレッシング法 レコード6件目取り出し struct

struct record x ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 オープンアドレッシング法 レコード6件目取り出し struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: ***EMPTY***

オープンアドレッシング法 レコード6件目ハッシュ関数計算 struct record x ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hash(“Ueno

オープンアドレッシング法 レコード6件目ハッシュ関数計算 struct record x ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hash(“Ueno Ranran”) = 9 → すでに埋まっている(衝突) struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: ***EMPTY***

struct record x ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 オープンアドレッシング法 レコード6件目ハッシュ関数再計算 hash(“Ueno

struct record x ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 オープンアドレッシング法 レコード6件目ハッシュ関数再計算 hash(“Ueno Ranran”) = 9 → すでに埋まっている(衝突) rehash(“Ueno Ranran”, 1) = 10 → すでに埋まっている(衝突) struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: ***EMPTY***

struct record x ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 オープンアドレッシング法 レコード6件目ハッシュ関数再々計算 struct

struct record x ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 オープンアドレッシング法 レコード6件目ハッシュ関数再々計算 struct record dummy hash(“Ueno Ranran”) = 9 → すでに埋まっている(衝突) rehash(“Ueno Ranran”, 1) = 10 → すでに埋まっている(衝突) rehash(“Ueno Ranran”, 2) = 11 ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: ***EMPTY***

オープンアドレッシング法 レコード6件目ハッシュ表へ登録 struct record x ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 struct

オープンアドレッシング法 レコード6件目ハッシュ表へ登録 struct record x ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 struct record dummy hash(“Ueno Ranran”) = 9 → すでに埋まっている(衝突) rehash(“Ueno Ranran”, 1) = 10 → すでに埋まっている(衝突) rehash(“Ueno Ranran”, 2) = 11 ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: ***EMPTY***

struct record x ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜 オープンアドレッシング法 レコード7件目取り出し struct

struct record x ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜 オープンアドレッシング法 レコード7件目取り出し struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: ***EMPTY***

オープンアドレッシング法 レコード7件目ハッシュ関数計算 struct record x ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜 hash(“Mitsuki

オープンアドレッシング法 レコード7件目ハッシュ関数計算 struct record x ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜 hash(“Mitsuki Mausu”) = 10 → すでに埋まっている(衝突) struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: ***EMPTY***

struct record x ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜 オープンアドレッシング法 レコード7件目ハッシュ関数再計算 hash(“Mitsuki

struct record x ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜 オープンアドレッシング法 レコード7件目ハッシュ関数再計算 hash(“Mitsuki Mausu”) = 10 → すでに埋まっている(衝突) rehash(“Mitsuki Mausu”, 1) = 11 → すでに埋まっている(衝突) struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: ***EMPTY***

struct record x ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜 オープンアドレッシング法 レコード7件目ハッシュ関数再々計算 struct

struct record x ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜 オープンアドレッシング法 レコード7件目ハッシュ関数再々計算 struct record dummy hash(“Mitsuki Mausu”) = 10 → すでに埋まっている(衝突) rehash(“Mitsuki Mausu”, 1) = 11 → すでに埋まっている(衝突) rehash(“Mitsuki Mausu”, 2) = 12 ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: ***EMPTY***

オープンアドレッシング法 レコード7件目ハッシュ表へ登録 struct record x ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜 struct

オープンアドレッシング法 レコード7件目ハッシュ表へ登録 struct record x ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜 struct record dummy hash(“Mitsuki Mausu”) = 10 → すでに埋まっている(衝突) rehash(“Mitsuki Mausu”, 1) = 11 → すでに埋まっている(衝突) rehash(“Mitsuki Mausu”, 2) = 12 ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

struct record x ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 オープンアドレッシング法 レコード8件目取り出し struct

struct record x ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 オープンアドレッシング法 レコード8件目取り出し struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 レコード8件目ハッシュ関数計算 struct record x ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hash(“Nobi

オープンアドレッシング法 レコード8件目ハッシュ関数計算 struct record x ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hash(“Nobi Toraemon”) = 0 → すでに埋まっている(衝突) struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 レコード8件目ハッシュ関数計算 struct record x ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hash(“Nobi

オープンアドレッシング法 レコード8件目ハッシュ関数計算 struct record x ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hash(“Nobi Toraemon”) = 0 → すでに埋まっている(衝突) rehash(“Nobi Toraemon”, 1) = 1 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: ***EMPTY*** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 レコード8件目ハッシュ表へ登録 struct record x ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hash(“Nobi

オープンアドレッシング法 レコード8件目ハッシュ表へ登録 struct record x ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hash(“Nobi Toraemon”) = 0 → すでに埋まっている(衝突) rehash(“Nobi Toraemon”, 1) = 1 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: Nobi ***EMPTY*** id: Toraemon hash: 0 data: ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

struct record x ename: jname: addr : オープンアドレッシング法 登録後 struct record dummy ename: Yokohama

struct record x ename: jname: addr : オープンアドレッシング法 登録後 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: Nobi ***EMPTY*** id: Toraemon hash: 0 data: ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); ↑ハッシュ表の状態が印刷される hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

struct record x ename: jname: addr : オープンアドレッシング法 重複データ登録の試み struct record dummy ename: Yokohama

struct record x ename: jname: addr : オープンアドレッシング法 重複データ登録の試み struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: Nobi ***EMPTY*** id: Toraemon hash: 0 data: ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 重複データ登録の試み struct record x ename: jname: addr : hash(“Yokohama Kunihiro”) = 8 struct

オープンアドレッシング法 重複データ登録の試み struct record x ename: jname: addr : hash(“Yokohama Kunihiro”) = 8 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: Nobi ***EMPTY*** id: Toraemon hash: 0 data: ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); “Yokohama Kunihiro” は、 すでに登録されているので登録拒否 hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 探索 1 struct record x ename: jname: addr : hash(“Hato Saburo”) = 8 → 該当せず

オープンアドレッシング法 探索 1 struct record x ename: jname: addr : hash(“Hato Saburo”) = 8 → 該当せず struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: Nobi ***EMPTY*** id: Toraemon hash: 0 data: ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 探索 1 struct record x ename: jname: addr : hash(“Hato Saburo”) = 8 → 該当せず

オープンアドレッシング法 探索 1 struct record x ename: jname: addr : hash(“Hato Saburo”) = 8 → 該当せず :見つかるか、または、1周するかEMPTY(存在しないことを確認する)まで再ハッシュ struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: Nobi ***EMPTY*** id: Toraemon hash: 0 data: ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 探索 1 struct record x ename: jname: addr : struct record dummy hash(“Hato

オープンアドレッシング法 探索 1 struct record x ename: jname: addr : struct record dummy hash(“Hato Saburo”) = 8 → 該当せず :見つかるか、または、EMPTYか1周する(存在しないことを確認する)まで再ハッシュ rehash(“Hato Saburo”) = 9 → 発見! ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: Nobi ***EMPTY*** id: Toraemon hash: 0 data: ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); found <(8) Hato Saburo 鳩三郎 鎌倉市小町> 再ハッシュにより発見 hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 探索 2 struct record x ename: jname: addr : hash(“Yokohama Kunihiro”) = 8

オープンアドレッシング法 探索 2 struct record x ename: jname: addr : hash(“Yokohama Kunihiro”) = 8 → 発見 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: Nobi ***EMPTY*** id: Toraemon hash: 0 data: ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); found <(8) Yokohama Kunihiro 横浜国大 1度の探索で発見 hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 横浜市保土ヶ谷区常盤台>addr : 浦安市舞浜

struct record x ename: jname: addr : オープンアドレッシング法 削除 1 struct record dummy ename:

struct record x ename: jname: addr : オープンアドレッシング法 削除 1 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: Nobi ***EMPTY*** id: Toraemon hash: 0 data: ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 削除 1: 探索 struct record x ename: jname: addr : hash(“Hato Saburo”) =

オープンアドレッシング法 削除 1: 探索 struct record x ename: jname: addr : hash(“Hato Saburo”) = 8 → 該当せず struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: Nobi ***EMPTY*** id: Toraemon hash: 0 data: ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 削除 1: 探索 struct record x ename: jname: addr : hash(“Hato Saburo”) =

オープンアドレッシング法 削除 1: 探索 struct record x ename: jname: addr : hash(“Hato Saburo”) = 8 → 該当せず :見つかるか、または、1周するかEMPTY(存在しないことを確認する)まで再ハッシュ struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: Nobi ***EMPTY*** id: Toraemon hash: 0 data: ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 削除 1: 探索 struct record x ename: jname: addr : struct record dummy

オープンアドレッシング法 削除 1: 探索 struct record x ename: jname: addr : struct record dummy hash(“Hato Saburo”) = 8 → 該当せず :見つかるか、または、EMPTYか1周する(存在しないことを確認する)まで再ハッシュ rehash(“Hato Saburo”, 1) = 9 → 発見! ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: Nobi ***EMPTY*** id: Toraemon hash: 0 data: ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: Hato ***EMPTY*** id: Saburo hash: 8 data: ename: Hato Saburo jname: 鳩三郎 addr : 鎌倉市小町 hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 削除 1: idに「削除済」を記録 struct record x ename: jname: addr : struct record dummy

オープンアドレッシング法 削除 1: idに「削除済」を記録 struct record x ename: jname: addr : struct record dummy hash(“Hato Saburo”) = 8 → 該当せず :見つかるか、または、EMPTYか1周する(存在しないことを確認する)まで再ハッシュ rehash(“Hato Saburo”, 1) = 9 → 発見! ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: Nobi ***EMPTY*** id: Toraemon hash: 0 data: ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: **DELETED** hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 • EMPTY(空)ではなくDELETED(削除済)と記録するのは、 data:  別の探索の際に、rehashする必要があるから ename: Mitsuki Mausu jname: 三月磨臼 • DELETEDの箇所の扱いは次のとおり • 探索時: 再ハッシュして続きを探索すべき(EMPTYと異なる) addr : 浦安市舞浜 • 挿入時: 挿入可能(EMPTYと同じ扱い)

struct record x ename: jname: addr : オープンアドレッシング法 削除 2 struct record dummy ename:

struct record x ename: jname: addr : オープンアドレッシング法 削除 2 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: Nobi ***EMPTY*** id: Toraemon hash: 0 data: ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: **DELETED** hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 削除 2: 探索 struct record x ename: jname: addr : hash(“Ueno Ranran”) =

オープンアドレッシング法 削除 2: 探索 struct record x ename: jname: addr : hash(“Ueno Ranran”) = 9 → ここは「削除済」: 該当せず、かつ、続きにある可能性 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: Nobi ***EMPTY*** id: Toraemon hash: 0 data: ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: **DELETED** hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 削除 2: 探索(再ハッシュ) struct record x ename: jname: addr : hash(“Ueno Ranran”) =

オープンアドレッシング法 削除 2: 探索(再ハッシュ) struct record x ename: jname: addr : hash(“Ueno Ranran”) = 9 → ここは「削除済」: 該当せず、かつ、続きにある可能性 :見つかるか、または、1周するかEMPTY(存在しないことを確認する)まで再ハッシュ struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: Nobi ***EMPTY*** id: Toraemon hash: 0 data: ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: **DELETED** hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 削除 2: 探索(再ハッシュ) struct record x ename: jname: addr : struct record dummy

オープンアドレッシング法 削除 2: 探索(再ハッシュ) struct record x ename: jname: addr : struct record dummy hash(“Ueno Ranran”) = 9 → ここは「削除済」: 該当せず、かつ、続きにある可能性 :見つかるか、または、1周するかEMPTY(存在しないことを確認する)まで再ハッシュ rehash(“Ueno Ranran”, 1) = 10 → 該当せず ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: Nobi ***EMPTY*** id: Toraemon hash: 0 data: ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: **DELETED** hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 削除 2: 探索(再ハッシュ) struct record x ename: jname: addr : struct record dummy

オープンアドレッシング法 削除 2: 探索(再ハッシュ) struct record x ename: jname: addr : struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 hash(“Ueno Ranran”) = 9 → ここは「削除済」: 該当せず、かつ、続きにある可能性 :見つかるか、または、1周するかEMPTY(存在しないことを確認する)まで再ハッシュ rehash(“Ueno Ranran”, 1) = 10 → 該当せず rehash(“Ueno Ranran”, 2) = 11 → 発見! /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: Nobi ***EMPTY*** id: Toraemon hash: 0 data: ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: **DELETED** hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: Ueno ***EMPTY*** id: Ranran hash: 9 data: ename: Ueno Ranran jname: 上野蘭々 addr : 台東区上野公園 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 削除 2: idに「削除済」を記録 struct record x ename: jname: addr : struct record dummy

オープンアドレッシング法 削除 2: idに「削除済」を記録 struct record x ename: jname: addr : struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 hash(“Ueno Ranran”) = 9 → ここは「削除済」: 該当せず、かつ、続きにある可能性 :見つかるか、または、1周するかEMPTY(存在しないことを確認する)まで再ハッシュ rehash(“Ueno Ranran”, 1) = 10 → 該当せず rehash(“Ueno Ranran”, 2) = 11 → 発見! /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: Nobi ***EMPTY*** id: Toraemon hash: 0 data: ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: **DELETED** hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

struct record x ename: jname: addr : オープンアドレッシング法 削除 3 struct record dummy ename:

struct record x ename: jname: addr : オープンアドレッシング法 削除 3 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: Nobi ***EMPTY*** id: Toraemon hash: 0 data: ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: **DELETED** hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 削除 3: 探索 struct record x ename: jname: addr : hash(“Nobi Toraemon”) =

オープンアドレッシング法 削除 3: 探索 struct record x ename: jname: addr : hash(“Nobi Toraemon”) = 0 → 該当せず struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: Nobi ***EMPTY*** id: Toraemon hash: 0 data: ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: **DELETED** hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 削除 3: 探索(再ハッシュ) struct record x ename: jname: addr : hash(“Nobi Toraemon”) =

オープンアドレッシング法 削除 3: 探索(再ハッシュ) struct record x ename: jname: addr : hash(“Nobi Toraemon”) = 0 → 該当せず :見つかるか、または、1周するかEMPTY(存在しないことを確認する)まで再ハッシュ struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: Nobi ***EMPTY*** id: Toraemon hash: 0 data: ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: **DELETED** hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 削除 3: 探索(再ハッシュ) struct record x ename: jname: addr : struct record dummy

オープンアドレッシング法 削除 3: 探索(再ハッシュ) struct record x ename: jname: addr : struct record dummy hash(“Nobi Toraemon”) = 0 → 該当せず :見つかるか、または、1周するかEMPTY(存在しないことを確認する)まで再ハッシュ rehash(“Nobi Toraemon”, 1) = 1 → 発見! ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: Nobi ***EMPTY*** id: Toraemon hash: 0 data: ename: Nobi Toraemon jname: 野比寅右衛門 addr : 横須賀市野比 hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: **DELETED** hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 削除 3: idに「削除済」を記録 struct record x ename: jname: addr : struct record dummy

オープンアドレッシング法 削除 3: idに「削除済」を記録 struct record x ename: jname: addr : struct record dummy hash(“Nobi Toraemon”) = 0 → 該当せず :見つかるか、または、1周するかEMPTY(存在しないことを確認する)まで再ハッシュ rehash(“Nobi Toraemon”, 1) = 1 → 発見! ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

struct record x ename: jname: addr : オープンアドレッシング法 削除 4 struct record dummy ename:

struct record x ename: jname: addr : オープンアドレッシング法 削除 4 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 削除 4: 探索 struct record x ename: jname: addr : hash(“Nanashi Gonbei”) =

オープンアドレッシング法 削除 4: 探索 struct record x ename: jname: addr : hash(“Nanashi Gonbei”) = 8 → 該当せず struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 削除 4: 探索 struct record x ename: jname: addr : hash(“Nanashi Gonbei”) =

オープンアドレッシング法 削除 4: 探索 struct record x ename: jname: addr : hash(“Nanashi Gonbei”) = 8 → 該当せず :見つかるか、または、1周するかEMPTY(存在しないことを確認する)まで再ハッシュ struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 削除 4: 探索(再ハッシュ 1回目) struct record x ename: jname: addr : struct record

オープンアドレッシング法 削除 4: 探索(再ハッシュ 1回目) struct record x ename: jname: addr : struct record dummy hash(“Nanashi Gonbei”) = 8 → 該当せず :見つかるか、または、1周するかEMPTY(存在しないことを確認する)まで再ハッシュ rehash(“Nanashi Gonbei”, 1) = 9 → ここは「削除済」: 該当せず、かつ、続きにある可能性 ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 削除 4: 探索(再ハッシュ 2回目) struct record x ename: jname: addr : struct record

オープンアドレッシング法 削除 4: 探索(再ハッシュ 2回目) struct record x ename: jname: addr : struct record dummy hash(“Nanashi Gonbei”) = 8 → 該当せず :見つかるか、または、1周するかEMPTY(存在しないことを確認する)まで再ハッシュ rehash(“Nanashi Gonbei”, 2) = 10 → 該当せず ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 削除 4: 探索(再ハッシュ 3回目) struct record x ename: jname: addr : struct record

オープンアドレッシング法 削除 4: 探索(再ハッシュ 3回目) struct record x ename: jname: addr : struct record dummy hash(“Nanashi Gonbei”) = 8 → 該当せず :見つかるか、または、1周するかEMPTY(存在しないことを確認する)まで再ハッシュ rehash(“Nanashi Gonbei”, 3) = 11 → ここは「削除済」: 該当せず、かつ、続きにある可能性 ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 削除 4: 探索(再ハッシュ 4回目) struct record x ename: jname: addr : struct record

オープンアドレッシング法 削除 4: 探索(再ハッシュ 4回目) struct record x ename: jname: addr : struct record dummy hash(“Nanashi Gonbei”) = 8 → 該当せず :見つかるか、または、1周するかEMPTY(存在しないことを確認する)まで再ハッシュ rehash(“Nanashi Gonbei”, 4) = 12 → 該当せず ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 削除 4: 探索(再ハッシュ 5回目) struct record x ename: jname: addr : struct record

オープンアドレッシング法 削除 4: 探索(再ハッシュ 5回目) struct record x ename: jname: addr : struct record dummy hash(“Nanashi Gonbei”) = 8 → 該当せず :見つかるか、または、1周するかEMPTY(存在しないことを確認する)まで再ハッシュ rehash(“Nanashi Gonbei”, 5) = 0 → 該当せず ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 削除 4: 探索(再ハッシュ 6回目) struct record x ename: jname: addr : struct record

オープンアドレッシング法 削除 4: 探索(再ハッシュ 6回目) struct record x ename: jname: addr : struct record dummy hash(“Nanashi Gonbei”) = 8 → 該当せず :見つかるか、または、1周するかEMPTY(存在しないことを確認する)まで再ハッシュ rehash(“Nanashi Gonbei”, 6) = 1 → ここは「削除済」: 該当せず、かつ、続きにある可能性 ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 削除 4: 探索(再ハッシュ 7回目) struct record x ename: jname: addr : struct record

オープンアドレッシング法 削除 4: 探索(再ハッシュ 7回目) struct record x ename: jname: addr : struct record dummy hash(“Nanashi Gonbei”) = 8 → 該当せず :見つかるか、または、1周するかEMPTY(存在しないことを確認する)まで再ハッシュ rehash(“Nanashi Gonbei”, 7) = 2 → ここは「空」: 該当せず、かつ、続きにもないことが確定 ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); 該当なし! 1回の探索+7回の再ハッシュ探索を費やした! hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

struct record x ename: jname: addr : オープンアドレッシング法 削除 5 struct record dummy ename:

struct record x ename: jname: addr : オープンアドレッシング法 削除 5 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 削除 5: 探索 struct record x ename: jname: addr : hash(“Yokohama Kunihiro”) =

オープンアドレッシング法 削除 5: 探索 struct record x ename: jname: addr : hash(“Yokohama Kunihiro”) = 8 → 発見! struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama ***EMPTY*** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜国大 addr : 横浜市保土ヶ谷区常盤台 hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); あくまでキーが一致するかどうかが条件なので、 削除されるアイテムはキーだけが一致し、 それ以外はdummyの内容と異なることに注意 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 削除 5: 探索idに「削除済」を記録 struct record x ename: jname: addr : hash(“Yokohama Kunihiro”) =

オープンアドレッシング法 削除 5: 探索idに「削除済」を記録 struct record x ename: jname: addr : hash(“Yokohama Kunihiro”) = 8 → 発見! struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: **DELETED** hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); あくまでキーが一致するかどうかが条件なので、 削除されるアイテムはキーだけが一致し、 それ以外はdummyの内容と異なることに注意 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

struct record x ename: jname: addr : オープンアドレッシング法 削除後 struct record dummy ename: Yokohama

struct record x ename: jname: addr : オープンアドレッシング法 削除後 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: **DELETED** hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 探索 struct record x ename: jname: addr : hash(“Hato Saburo”) = 8 →

オープンアドレッシング法 探索 struct record x ename: jname: addr : hash(“Hato Saburo”) = 8 → DELETEDなので、続きを探索 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: **DELETED** hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 探索 struct record x ename: jname: addr : hash(“Hato Saburo”) = 8 →

オープンアドレッシング法 探索 struct record x ename: jname: addr : hash(“Hato Saburo”) = 8 → DELETEDなので、続きを探索 rehash(“Hato Saburo”, 1) = 9 → DELETEDなので、続きを探索 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: **DELETED** hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 探索 struct record x ename: jname: addr : struct record dummy hash(“Hato Saburo”)

オープンアドレッシング法 探索 struct record x ename: jname: addr : struct record dummy hash(“Hato Saburo”) = 8 → DELETEDなので、続きを探索 rehash(“Hato Saburo”, 1) = 9 → DELETEDなので、続きを探索 rehash(“Hato Saburo”, 2) = 10 → キー不一致なので、続きを探索 ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: **DELETED** hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 探索 struct record x ename: jname: addr : struct record dummy ename: Yokohama

オープンアドレッシング法 探索 struct record x ename: jname: addr : struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 hash(“Hato Saburo”) = rehash(“Hato Saburo”, /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); 8 → 1) = 2) = 3) = DELETEDなので、続きを探索 9 → DELETEDなので、続きを探索 10 → キー不一致なので、続きを探索 11 → DELETEDなので、続きを探索 struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: **DELETED** hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 探索 struct record x ename: jname: addr : struct record dummy ename: Yokohama

オープンアドレッシング法 探索 struct record x ename: jname: addr : struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 hash(“Hato Saburo”) = rehash(“Hato Saburo”, /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); 8 → 1) = 2) = 3) = DELETEDなので、続きを探索 9 → DELETEDなので、続きを探索 10 → キー不一致なので、続きを探索 11 → DELETEDなので、続きを探索 struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: **DELETED** hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); rehash(“Hato Saburo”, 4) = 12 → hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 キー不一致なので、続きを探索 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 探索 struct record x ename: jname: addr : struct record dummy ename: Yokohama

オープンアドレッシング法 探索 struct record x ename: jname: addr : struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 hash(“Hato Saburo”) = rehash(“Hato Saburo”, /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); 8 → 1) = 2) = 3) = DELETEDなので、続きを探索 9 → DELETEDなので、続きを探索 10 → キー不一致なので、続きを探索 11 → DELETEDなので、続きを探索 struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: **DELETED** hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); rehash(“Hato Saburo”, 4) = rehash(“Hato Saburo”, 5) = hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 12 → キー不一致なので、続きを探索 data: 0 → キー不一致なので、続きを探索 ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 探索 struct record x ename: jname: addr : struct record dummy ename: Yokohama

オープンアドレッシング法 探索 struct record x ename: jname: addr : struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 hash(“Hato Saburo”) = rehash(“Hato Saburo”, /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); 8 → 1) = 2) = 3) = DELETEDなので、続きを探索 9 → DELETEDなので、続きを探索 10 → キー不一致なので、続きを探索 11 → DELETEDなので、続きを探索 struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: **DELETED** hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); rehash(“Hato Saburo”, 4) = rehash(“Hato Saburo”, 5) = rehash(“Hato Saburo”, 6) = hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 12 → キー不一致なので、続きを探索 data: 0 → キー不一致なので、続きを探索 ename: Mitsuki Mausu jname: 三月磨臼 1 → DELETEDなので、続きを探索 addr : 浦安市舞浜

オープンアドレッシング法 探索 struct record x ename: jname: addr : struct record dummy ename: Yokohama

オープンアドレッシング法 探索 struct record x ename: jname: addr : struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 hash(“Hato Saburo”) = rehash(“Hato Saburo”, /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); 8 → 1) = 2) = 3) = DELETEDなので、続きを探索 9 → DELETEDなので、続きを探索 10 → キー不一致なので、続きを探索 11 → DELETEDなので、続きを探索 struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: **DELETED** hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 12 → キー不一致なので、続きを探索 data: 0 → キー不一致なので、続きを探索 ename: Mitsuki Mausu jname: 三月磨臼 1 → DELETEDなので、続きを探索 addr : 浦安市舞浜 rehash(“Hato Saburo”, 4) = rehash(“Hato Saburo”, 5) = rehash(“Hato Saburo”, 6) = rehash(“Hato Saburo”, 7) = 2 → EMPTYなので、ないことを確認 → “Hato Saburo”をidとするアイテムは存在しない!

オープンアドレッシング法 探索 struct record x ename: jname: addr : struct record dummy ename: Yokohama

オープンアドレッシング法 探索 struct record x ename: jname: addr : struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 hash(“Yokohama Kunihiro”) = rehash(“Yokohama Kunihiro”, /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); 8 → 1) = 2) = 3) = DELETEDなので、続きを探索 9 → DELETEDなので、続きを探索 10 → キー不一致なので、続きを探索 11 → DELETEDなので、続きを探索 struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: **DELETED** hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: 12 → キー不一致なので、続きを探索 ename: Mitsuki Mausu 0 → キー不一致なので、続きを探索 1 → DELETEDなので、続きを探索jname: 三月磨臼 addr : 浦安市舞浜 rehash(“Yokohama Kunihiro”, 4) = rehash(“Yokohama Kunihiro”, 5) = rehash(“Yokohama Kunihiro”, 6) = rehash(“Yokohama Kunihiro”, 7) = 2 → EMPTYなので、ないことを確認 → “Yokohama Kunihiro”をidとするアイテムは存在しない!

オープンアドレッシング法 挿入 struct record x ename: jname: addr : hash(“Yokohama Kunihiro”) = 8 struct

オープンアドレッシング法 挿入 struct record x ename: jname: addr : hash(“Yokohama Kunihiro”) = 8 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: **DELETED** hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); 今回挿入するレコードの内容は、 dummyに書かれている内容であることに注意 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 挿入 struct record x ename: jname: addr : hash(“Yokohama Kunihiro”) = 8 →

オープンアドレッシング法 挿入 struct record x ename: jname: addr : hash(“Yokohama Kunihiro”) = 8 → DELETEDなので、挿入可能 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: **DELETED** hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); 今回挿入するレコードの内容は、 dummyに書かれている内容であることに注意 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 挿入 struct record x ename: jname: addr : hash(“Yokohama Kunihiro”) = 8 →

オープンアドレッシング法 挿入 struct record x ename: jname: addr : hash(“Yokohama Kunihiro”) = 8 → DELETEDなので、挿入可能 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama **DELETED** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); 今回挿入するレコードの内容は、 dummyに書かれている内容であることに注意 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

struct record x ename: jname: addr : オープンアドレッシング法 挿入後 struct record dummy ename: Yokohama

struct record x ename: jname: addr : オープンアドレッシング法 挿入後 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama **DELETED** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); 今回挿入するレコードの内容は、 dummyに書かれている内容であることに注意 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

オープンアドレッシング法 探索 1 struct record x ename: jname: addr : hash(“Yokohama Kunihiro”) = 8

オープンアドレッシング法 探索 1 struct record x ename: jname: addr : hash(“Yokohama Kunihiro”) = 8 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama **DELETED** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); found <(8) Yokohama Kunihiro 横浜邦博 横浜市中区日本大通> 今度の結果は、先ほど新たに挿入されたデータであることに注意 hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜

struct record x ename: jname: addr : オープンアドレッシング法 終了直前の状態 struct record dummy ename: Yokohama

struct record x ename: jname: addr : オープンアドレッシング法 終了直前の状態 struct record dummy ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 /* ハッシュ表初期化 */ makenull(hashtable); printhashtable(hashtable); /* 初期データ登録 */ while( getrecord(&x) ) insert(&x, x. ename, hashtable); printhashtable(hashtable); struct item hashtable[B] hashtable[ 0] id: Ashigara ***EMPTY*** id: Kintaro hash: 0 data: ename: Ashigara Kintaro jname: 足柄金太郎 addr : 南足柄市金時山 hashtable[ 4] id: Kanagawa ***EMPTY*** id: Hanako hash: 4 data: ename: Kanagawa Hanako jname: 神奈川花子 addr : 横浜市神奈川区三ッ沢上町 hashtable[ 1] id: **DELETED** hashtable[ 5] id: ***EMPTY*** hashtable[ 2] id: ***EMPTY*** hashtable[ 6] id: ***EMPTY*** hashtable[ 3] id: ***EMPTY*** hashtable[ 7] id: ***EMPTY*** hashtable[ 8] id: Yokohama **DELETED** id: Kunihiro hash: 8 data: ename: Yokohama Kunihiro jname: 横浜邦博 addr : 横浜市中区日本大通 hashtable[ 9] id: **DELETED** /* 重複データの登録試み */ insert(&dummy, dummy. ename, hashtable); /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* ハッシュ表からのデータ削除 */ delete("Hato Saburo", hashtable); delete("Ueno Ranran", hashtable); delete("Nobi Toraemon", hashtable); delete("Nanashi Gonbei", hashtable); delete(dummy. ename, hashtable); printhashtable(hashtable); hashtable[10] id: Hojo ***EMPTY*** id: Umeko hash: 9 data: ename: Hojo Umeko jname: 北条梅子 addr : 小田原市城山 hashtable[11] id: **DELETED** /* ハッシュ表を対象とした探索 */ printsearch("Hato Saburo", hashtable); printsearch(dummy. ename, hashtable); /* 再登録・再探索 */ printf("===Re-insert===n"); insert(&dummy, dummy. ename, hashtable); printsearch("Mitsuki Mausu", hashtable); printhashtable(hashtable); まとめ  • 動的データ管理: 探索、挿入、削除 → 記録できる量に制限あり •  ハッシュ表の探索開始箇所を見つけるには、O(1):  登録済みのデータ件数には依存しない •  ハッシュ表の要素リストの中からアイテムを見つけるには、 再ハッシュ回数に依存 O( N ) (最悪時) hashtable[12] id: Mitsuki ***EMPTY*** id: Mausu hash: 10 data: ename: Mitsuki Mausu jname: 三月磨臼 addr : 浦安市舞浜