Page 357 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 357
a next가 자기 자신을 가리키는 경우 b next가 다른 객체를 가리키는 경우
Node Node Node
data data
next next
[그림 9C-1] 자기 참조 구조체
이때 Node를 선언하면서(태그 이름인 __node를 부여하면서) typedef 선언도 동시에 하고 있다는 점
에 대해 좀 더 알아보겠습니다. 위의 구조체 선언문을 다시 보면 구조체 자료형의 이름인 ‘struct __
node’에 대해 typedef로 ‘Node’라고 이름을 다시 정의하고 있습니다. 그러면 구조체는 typedef로
정의한 이름도 주어집니다. 이때 구조체를 정의하는 부분에서 멤버 next는 struct __node *형이 아
니라 Node *형으로 선언할 수 있다고 생각하는 실수를 저지를 수 있습니다. 정말로 그렇게 되는지 살
펴보겠습니다.
/*--- 노드 ---*/
typedef struct __node {
X Member data;
Node *next; /* 컴파일 오류 */
} Node;
안타깝게도 이 프로그램을 컴파일하면 컴파일 오류가 발생합니다. 멤버 next를 선언하는 순간에는 아
직 Node형의 typedef 선언이 종료되지 않았기 때문입니다. 다음 코드를 보면 좀 더 이해하기가 쉬울
것입니다.
/*--- 노드 ---*/
typedef struct __node {
X Member data;
Node *next; /* Node형이 아직 정의되지 않았습니다. */
} Node; /* 이 부분에서 Node형의 typedef 선언이 완료됩니다. */
연결 리스트를 사용한 프로그램
실습 9-3은 연결 리스트 LinkedList를 사용한 프로그램입니다.
이 프로그램을 컴파일하려면 Member.h, Member.c, LinkedList.h, LinkedList.c가 필요합니다.
09•리스트 357