본문 바로가기
코스웨어/15년 스마트컨트롤러

연결리스트 - insert3 함수

by 알 수 없는 사용자 2015. 5. 13.
728x90
반응형

#include <stdio.h>
#include <stdlib.h>

typedef struct _node
{
    int iNum;
    struct _node *stNext;   //자기 참조 포인터

} Node;

void node_init(Node *stTemp)
{
    if(stTemp == 0)
    {
        return;
    }
    printf("번호를 입력하세요  :  ");
    scanf("%d"&(stTemp->iNum));
    stTemp->stNext = 0;

}

///////////////////////////////////////////////////////////////////////////
void node_insert3(Node **stHead)    //제일 작은 값이 앞에 오도록 정렬하며 저장
{
    Node *stHelp;
    Node *stESeeker;
    Node *stTemp;

    if(0 == stHead)
    {
        return;
    }

    stTemp = (Node *)malloc(sizeof(Node));
    node_init(stTemp);
    
    if(0 == *stHead)
    {
        *stHead = stTemp;
        return;
    }

    if( stTemp->iNum > (*stHead)->iNum )
    {
        stTemp->stNext = *stHead;
        *stHead = stTemp;
        return;
    }

    stESeeker = stHelp = *stHead;

    while0 != stESeeker )
    {
        if( stTemp->iNum > stESeeker->iNum )
        {
            stTemp->stNext = stESeeker;   
            if( *stHead == stESeeker )
            {
                *stHead = stTemp;
                return;
            }
            stHelp->stNext = stTemp;
            return;
        }
        stHelp = stESeeker;
        stESeeker = stESeeker->stNext;
    }

    stTemp->stNext = stESeeker;   
    stHelp->stNext = stTemp;
    
    return;
}


//////////////////////////////////////////////////////////////////////////////
void node_insert2(Node **stHead) //리스트의 제일 앞에 저장
{
    Node *stTemp;

    if(0 == stHead)
    {
        return;
    }

    stTemp = (Node *)malloc(sizeof(Node));
    node_init(stTemp);

    if(0 == *stHead)
    {
        *stHead = stTemp;
        return;
    }

    stTemp->stNext = *stHead;
    *stHead = stTemp;
}



//////////////////////////////////////////////////////////////////////////////////
void node_insert1(Node **stHead)    //리스트의 끝에 저장
{
    Node *stESeeker;
    Node *stTemp;

    if(0 == stHead)
    {
        return;
    }

    stTemp = (Node *)malloc(sizeof(Node));
    node_init(stTemp);

    if(0 == *stHead)
    {
        *stHead = stTemp;
        return;
    }

    stESeeker = *stHead;

    while1 )
    {
        if0 == stESeeker->stNext )
        {
            stESeeker->stNext = stTemp;
            break;
        }
        stESeeker = stESeeker->stNext;
    }

    return;


    /*
    Node **tmp = stHead;
    while(*tmp != 0)
    {
        tmp = &((*tmp)->stNext);
    }
    *tmp = stTemp;
    */

    ////////////////////////////////////
    ////////////////////////////////////
    /*
    while(*stHead != 0)
    {
        stHead = &((*stHead)->stNext);
    }
    *stHead = stTemp;
    */

    ///////////////////////////////////
    
    //(*stHead)->stNext = stTemp;
}


void node_print(Node *);
void node_free(Node *);



int main(void)
{
    Node *head = 0;

    node_insert3(&head);
    node_insert3(&head);
    node_insert3(&head);
    node_insert3(&head);
    node_insert3(&head);
    /*
       head = (Node *)malloc(sizeof(Node));
       head->iNum = 100;

       head->stNext = (Node *)malloc(sizeof(Node));
       head->stNext->iNum = 200;   

       head->stNext->stNext = (Node *)malloc(sizeof(Node));
       head->stNext->stNext->iNum = 300;   
       head->stNext->stNext->stNext = 0;
     */


    node_print(head);
    node_free(head);
    return 0;
}

void node_print(Node *temp)
{
    while(temp != 0)
    {
        printf("%d->", temp->iNum);
        temp = temp->stNext;
    }
    printf("NULL\n");
}

void node_free(Node *head)
{
    Node *temp = head;  
    while(temp != 0)
    {
        temp = head->stNext;
        printf("%d 해제\n", head->iNum);
        free(head);
        head = temp;
    }
}

728x90