하고 싶은 얘기를 마음대로 쓰는 게시판입니다. 개발 관련 이야기, 살면서 재미있었던 일, 인생 상담, 예쁘고 신기한 사진 등 마음대로 떠들어 보세요. 단, 개발관련 질문만은 별도의 게시판을 이용해 주십시오.
  • 단일 링크드 리스트 1차.
  • 조회 수: 1069, 추천 수: 0/0, 2016-01-14 17:43:27(2016-01-14)
  • 단일 링크드 리스트 기초적인 방식입니다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    #include <stdio.h>
     
    /*
        단일 링크드 리스트
        head와 tail에 데이터를 넣지 않는 기초적인 방식.
    */
     
    // 1.구조체를 선언.
    typedef struct movie {
        char title[100];    // 타이틀
        double rating;      // 평점
        struct movie *next; // next노드
    } MOVIE;
     
    // 2.head와 tail을 전역으로 선언
    MOVIE * head = NULL;
    MOVIE * tail = NULL;
     
    // 3.movie추가
    void add_movie()
    {
        // 3-1. 새로운 movie노드 생성
        MOVIE * newMovie = new MOVIE;
     
        // 3-2. 값입력. 편의상 오류처리 하지않음.
        printf("Title:");
        scanf("%s", newMovie->title);
        printf("rating:");
        scanf("%lf", &newMovie->rating);
        newMovie->next = NULL;
     
        // 3-3. 헤드가 NULL이면 첫 데이터.
        if (head == NULL)
        {
            // 헤드와 테일 모두 같은곳을 가리킨다.
            head = newMovie;
            tail = newMovie;
        }
        else
        {
            // 첫 데이터가 아니면 제일 끝 노드(테일)에 추가시킨다.
            tail->next = newMovie;  // 제일 끝 노드(테일)의 next에 newMovie를 추가.
            tail = newMovie;        // 이제 제일 끝 노드는 newMovie가 됐다.
        }
        printf("[Create NODE]. title:%s\n", newMovie->title);
    }
     
    // 4.movie보기
    void show_movie()
    {
        // 4-1. 출력대상에 head를 지정
        MOVIE * current = head;
     
        // 4-2. 출력대상이 NULL이 아닐때까지 루프
        while (current != NULL)
        {
            // 4-3. 출력.
            printf("Title:%s, Rating:%lf\n", current->title, current->rating);
            
            // 4-4. 출력대상에 그 다음 노드를 지정.
            current = current->next;
        }
    }
     
    // 5.movie삭제
    void clear_movie()
    {
        // 5-1. 삭제대상에 head를 지정
        MOVIE * current = head;
        MOVIE * temp = NULL;
     
        // 5-2. 삭제대상이 NULL이 아닐때까지 루프
        while (current != NULL)
        {
            // 5-3. 삭제대상의 다음 노드를 미리 확보.
            temp = current->next;
     
            // 5-4. 삭제대상을 삭제
            printf("[Remove NODE]. title:%s\n", current->title);
            delete current;
     
            // 5-5. 확보했던 노드를 설정
            current = temp;
        }
    }
     
    int main()
    {
        for (int i = 0; i < 3; i++)
        {
            // 3.movie추가
            add_movie();
        }
        
        // 4.movie보기
        show_movie();
     
        // 5.movie삭제
        clear_movie();
     
        return 0;
    }
     
    cs


댓글 0

현재 게시판 기능 테스트중입니다. 디자인이나 게시판 구성은 언제든지 예고없이 변경될 수 있습니다.