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

2015/05/12:: 20150512-8번-김태영-널확인, 오름차순 연결리스트

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

https://www.evernote.com/shard/s364/sh/3074b3c1-c6bf-4fa2-bc60-36cfad24ce24/7f2295d30a63f165


위에 링크들어가셔야 정리된거 있습니다!!!

소스

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

#pragma pack (1)

typedef struct _node{
    int inum;
    struct _node * stNext;
}Node;

#pragma pack (4)

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


/*
   Node * node_insert(Node * stHead){
   Node * stTemp = 0;
   stTemp = malloc(sizeof(Node));

   stHead = stTemp;

   node_init(stTemp);

   return stHead;
   }
*/

Node node_init(Node * stTemp) {
    if (stTemp == 0) {
        printf("연결된 노드가 없습니다.\n");
        return ;
    }

    printf("노드에 삽입될 정수를 입력하세요 : ");
    scanf("%d", &stTemp->inum);

    stTemp->stNext = 0;
}

void node_insert(Node ** stHead){
    Node * stTemp = 0;
    Node * stESeeker=0;


    if (stHead == 0) { //제대로 된 연결리스트가 왔느냐 확인, &head를 받음
        printf("전달받은 노드가 존재하지 않습니다.\n");
        return;
    }


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

    if (*stHead == 0){//처음에 사용하는 경우, head가 0과 같느냐
        *stHead = stTemp; //head의 값이 생기는 순간, 연결리스트 하나 추가

        return;
    } //처음만!
    stESeeker = *stHead;
        while(1)
        {
            if(stESeeker->stNext==0)
            {
                stESeeker->stNext=stTemp;
                break;
            }
            stESeeker=stESeeker->stNext;
        }

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

}
/*
void node_insert2(Node ** stHead)
{

}
*/
void node_insert3(Node ** stHead)
{
    Node * stTemp = 0;
    Node * stESeeker=0;


    if (stHead == 0) { //제대로 된 연결리스트가 왔느냐 확인, &head를 받음
        printf("전달받은 노드가 존재하지 않습니다.\n");
        return;
    }


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

    if (*stHead == 0){//처음에 사용하는 경우, head가 0과 같느냐
        *stHead = stTemp; //head의 값이 생기는 순간, 연결리스트 하나 추가

        return;
    }

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


}


int main(){
    Node * head = 0;

    //  node_insert(head);

    node_insert3(&head);
    node_insert3(&head);
    /*
       head = malloc(sizeof(Node));

       head->inum = 100;
       head->stNext = malloc(sizeof(Node));
       head->stNext->inum = 200;
       head->stNext->stNext = 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;
    }
    if (temp == 0){
        printf("NULL\n");
    }
}

void node_free(Node * head){
    Node * temp = 0;

    while (head != 0){
        temp = head->stNext;
        printf("[%d] Node Free\n", head->inum);
        free(head);
        head = temp;
    }
    printf("\n");

} 


728x90