Coding Log


Node

Linked List를 구성하는 원소를 노드라한다.

하나의 데이터가 하나의 노드를 차지하는 형태이다.

아래의 그림을 보자.

Untitled

위의 그림은 Node에 대한 논리적 구조를 나타낸 것으로 Node는 크게 Data 필드와 Link 필드로 나뉘는 것을 확인할 수 있다.

참고 Data 필드는 기본적인 자료형부터 Structure나 Class 등으로 특정 자료형을 지정해서 사용할 수도 있다.

Data 필드는 원소의 값을 저장하는 영역이며 Link 필드는 해당 Node에 다음 순서인 Node의 위치인 주소값 포인터를 이용해 저장한다.

Linked List는 하나 이상의 Node가 모여 구성되므로 아래와 같이 나타낼 수 있을 것이다.

Untitled

위의 그림을 보면 포인터를 나타내는 화살표 없이 주르륵 이어진 구조로 표현하는 배열과의 차이점을 명확히 알 수 있을 것이다.

이제 Node를 코드로 나타내보자.

typedef struct Node {
    char data[10];
    struct Node* link;
};

Untitled

위의 그림에 있는 3개의 Node를 코드로 표현하면 아래와 같다.

#include <stdio.h>

typedef struct Node {
    char data;
    struct Node* link;
};

int main(void) {

    Node node1, node2, node3;
    node1.data = 'A';
    node2.data = 'B';
    node3.data = 'C';

    return 0;
}

Data 필드는 초기화되었고, 이제 남은 것은 Link 필드이다.

위의 그림처럼 A->B->C 순서로 초기화하면 아래와 같다.

#include <stdio.h>

typedef struct Node {
    char data;
    struct Node* link;
};

int main(void) {

    Node node1, node2, node3;
    node1.data = 'A';
    node1.link = &node2;

    node2.data = 'B';
    node2.link = &node3;

    node3.data = 'C';
    node3.link = NULL;

    return 0;
}

아래와 같이 포인터를 이용해 Data 필드를 출력하는 코드를 넣어보자.

#include <stdio.h>


typedef struct Node {
    char data;
    struct Node* link;
};


int main(void) {

    Node node1, node2, node3;
    node1.data = 'A';
    node1.link = &node2;

    node2.data = 'B';
    node2.link = &node3;

    node3.data = 'C';
    node3.link = NULL;


    Node* temp = &node1;
    while(temp != NULL) {
        printf("%c \n", temp -> data);

        temp = temp -> link;
    }
    return 0;
}

출력 결과는 아래와 같다.

A
B
C 

앞으로 포스팅하는 자료구조 관련 포스팅에선 위와 같은 구조의 Node를 주로 활용할 예정이므로 따로 빼서 다뤄보았다.

DISQUS 로드 중…
댓글 로드 중…

트랙백을 확인할 수 있습니다

URL을 배껴둬서 트랙백을 보낼 수 있습니다