selfSearch 自己組織化探索
LIST *selfSearch(LIST *list, int target);
typedef struct _list {
int key; /* 比較のキーとなるフィールド */
int info; /* その他のフィールド */
struct _list *next; /* つぎの要素 */
} LIST;
list (入力)リストのヘッダ
target (入力)探索目標とするキーの値
見つかった場合はその要素へのポインタ。見つからなかった 場合は NULL。
LIST *selfSearch(LIST *list, int target)
{
LIST *head, *prev;
if (list == NULL) return NULL;
for (prev = head = list; (list = prev->next) != NULL; prev = list)
if (list->key == target) {
prev->next = list->next;
list->next = head->next;
head->next = list;
return list;
}
return NULL;
}
しかし、移動は配列にとっては大変時間のかかり作業であり、一方リストな らばポインタの付け替えだけですむ。したがって、自己組織化探索では、デ ータはリストにより保持される。