더북(TheBook)

그림 12-7처럼 연결 리스트에서 자기 참조 구조체 데이터 중 2번 구조체의 값을 더 이상 저장할 필요가 없다면, 1번 구조체의 자기 참조 포인터 변수의 값, 즉 가리키고 있는 구조체의 주소 정보를 204번지가 아닌 304번지로 변경하면 됩니다.

이제 예제를 통해 실습해 보겠습니다. 구조체의 주소를 갖는 포인터 변수 p를 선언하고 연결 리스트의 처음에 위치한 구조체의 주소로 초기화하였습니다. 그리고 이 포인터 변수가 for 반복문과 함께 구조체 리스트의 처음과 끝까지 순회하면서 각 구조체의 data 값을 출력하는 코드입니다.

list_3.c

#include <stdio.h>
 
struct abc {          // 구조체 정의
    int data;
    struct abc *next; // 자기 참조 구조체
};
 
main() {
    struct abc x;     // 구조체 변수 x 선언
    struct abc y;
    struct abc z;
 
    x.data = 10;
    y.data = 20;
    z.data = 30;
 
    x.next = &y;      // 구조체 연결
    y.next = &z;
    z.next = NULL;
 
    struct abc *p;    // 연결 리스트 순회를 위한 포인터 변수 선언
    for (p = &x; p != NULL; p = p->next) {   // 연결 리스트 순회
        printf("%d\n", p->data);
    }
 
    printf("구조체 y 삭제 후 \n");
    x.next = &z;
    y.next = NULL;
 
    for (p = &x; p != NULL; p = p->next) {
        printf("%d\n", p->data);
    }
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.