ÀÚü Á¶Á÷È­ Ž»ö


ÇÔ¼ö¸í
selfSearch  ÀÚü Á¶Á÷È­ Ž»ö
Çü½Ä
LIST *selfSearch(LIST *list, int target);
Àμö
typedef struct _list {
    int key;             /* ºñ±³ÀÇ Å°°¡ µÇ´Â Çʵå */
    int info;            /* ±× ¿ÜÀÇ Çʵå */
    struct _list *next;  /* ´ÙÀ½ÀÇ ¿ä¼Ò */
} LIST;

list    (ÀÔ·Â) ¸®½ºÆ®ÀÇ Çì´õ
target  (ÀÔ·Â) Ž»ö ¸ñÇ¥·Î ÇÏ´Â Å°ÀÇ °ª
ÇÔ¼öÄ¡
¹ß°ßµÇ¾úÀ» °æ¿ì´Â ±× ¿ä¼Ò¿¡ÀÇ Æ÷ÀÎÅÍ. ¹ß°ßµÇÁö ¾Ê¾Ò´Ù
°æ¿ì´Â NULL.
ÁÖÀÇ »çÇ×
¸®½ºÆ®°¡ ¿Ã¹Ù¸£°Ô ÀÛ¼ºµÇ°í ÀÖ´Â °ÍÀÌ ÀüÁ¦°¡ µÈ´Ù. ¼¼¼¼ÇÑ °Í¿¡ ºÙ¾î ´ÙÀ½ÀÇ ¿ë·Ê ÇÁ·Î±×·¥À» ÂüÁ¶ÇÏ´Â °Í.

¿ë·Ê(selfSearch-test.c )

ÇÁ·Î±×·¥(selfSearch.c )
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;
}
¼³¸í
¼±Çü Ž»ö¿¡¼­´Â ¼±µÎ·ÎºÎÅÍ ¿ä¼Ò¸¦ ÇϳªÇϳª Á¶»çÇϹǷÎ, µÚ¿¡ ÀÖ´Â ¿ä¼Ò(Á¤µµ)¸¸Å­ Ž»ö ½Ã°£ÀÌ °É¸°´Ù. °Å±â¼­, Ž»ö ¸¶´Ù, ¹ß°ßµÈ ¿ä¼Ò¸¦ ¼±µÎ·Î À̵¿Çϸé, ºó¹øÇÏ°Ô °Ë»öµÇ´Â °Í(Á¤µµ)¸¸Å­ ¼±µÎ¿¡ ¸ð¿©, Æò±Õ Ž»ö ½Ã°£ÀÌ Âª¾ÆÁö´Â °ÍÀÌ ±â´ëÇÒ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ¹æ¹ý (À»)¸¦ ÀÚü Á¶Á÷È­ Ž»öÀ̶ó°í ÇÑ´Ù.

±×·¯³ª, À̵¿Àº ¹è¿­¿¡ À־´Â Å« ÀÏ ½Ã°£ ÀÇ °ÍÀÎÁö ºô¸®°í ÀÛ¾÷À̸ç, ÇÑÆí ¸®½ºÆ®ÀÎ Æ÷ÀÎÅÍ°¡ »õ·Î ºÙÀÌ°í »ÓÀ¸·Î ÇØ°áµÈ´Ù. µû¶ó¼­, ÀÚü Á¶Á÷È­ Ž»ö¿¡¼­´Â, µ¥ Ÿ´Â ¸®½ºÆ®¿¡ ÀÇÇØ º¸°ü À¯ÁöµÈ´Ù.

°ü·Ã ÇÔ¼ö
¼±Çü Ž»ö, 2ºÐ Ž»ö, 2ºÐ Ž»ö³ª¹«, AVL³ª¹«, B³ª¹«