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; }
しかし、移動は配列にとっては大変時間のかかり作業であり、一方リストな らばポインタの付け替えだけですむ。したがって、自己組織化探索では、デ ータはリストにより保持される。