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
   352   353   354   355   356   357   358   359   360   361   362