#include <stdio.h>
struct list{
int num;
struct list *next;
};
int main(void){
struct list a = {10, 0}, b = {20,0}, c = {30,0};
struct list *head = &a, *current;
a.next = &b, b.next = &c;
printf("head -> num : %d\n", head -> num);
printf("head -> next -> num : %d\n", head -> next -> num);
printf("list all :");
current = head;
while(current != NULL){
printf("%d ", current -> num);
current = current -> next;
}
printf("\n");
return 0;
}
### 구조체 정의
- `struct list`는 연결 리스트의 노드를 정의하는 구조체입니다. 각 노드는 `num` 필드를 가지며, 이는 노드에 저장된 데이터입니다. `next` 포인터는 다음 노드를 가리킵니다. 마지막 노드의 `next`는 `NULL`로 설정하여 리스트의 끝을 표시합니다.
### 연결 리스트 초기화
- `struct list a = {10, 0}, b = {20, 0}, c = {30, 0};`를 통해 세 개의 노드 `a`, `b`, `c`를 초기화합니다. 각각의 `num` 필드에는 10, 20, 30이 저장됩니다. `next` 포인터는 초기에 `0` (또는 `NULL`)으로 설정됩니다.
- `a.next = &b, b.next = &c;`를 통해 각 노드를 연결합니다. 이렇게 하면 `a`는 `b`를, `b`는 `c`를 가리키게 되며, `c`의 `next`는 초기값 `NULL`을 유지하여 리스트의 끝을 나타냅니다.
### 리스트 순회 및 데이터 출력
- `struct list *head = &a, *current;`를 통해 리스트의 시작을 가리키는 `head` 포인터와 현재 탐색 중인 노드를 가리킬 `current` 포인터를 선언합니다.
- 먼저 `head` 노드의 `num` 값과 `head`의 다음 노드 (`head -> next`)의 `num` 값을 출력하여 연결이 정상적으로 이루어졌는지 확인합니다.
- `while(current != NULL)` 루프를 통해 리스트의 시작부터 끝까지 순회합니다. 각 노드의 `num` 값을 출력하고, `current`를 다음 노드로 업데이트하여 리스트의 모든 데이터를 출력합니다.
### 실행 결과
이 프로그램을 실행하면 다음과 같은 출력을 얻게 됩니다:
```
head -> num : 10
head -> next -> num : 20
list all :10 20 30
```
첫 번째 두 줄은 `head`가 정상적으로 첫 번째 노드를 가리키고 있으며, `head -> next`가 두 번째 노드를 정확히 가리키고 있음을 확인시켜 줍니다. 마지막 줄은 연결 리스트를 순회하며 모든 노드의 `num` 값을 출력하여 리스트 전체의 데이터를 보여줍니다. 이 예제는 기본적인 연결 리스트의 구현과 사용 방법을 보여줍니다.
'개념 > 혼자 공부하는 C언어' 카테고리의 다른 글
chapter 17) 최고 학점의 학생 데이터 출력 (0) | 2024.10.05 |
---|---|
chapter 17) 구조체 배열을 초기화하고 출력 (1) | 2024.10.04 |
chapter 17) 열거형을 사용한 프로그램 (1) | 2024.10.02 |
chapter 17) 배열과 포인터를 멤버로 갖는 구조체 사용 (0) | 2024.10.01 |
chapter 17) 명령형 인수를 출력하는 프로그램 (0) | 2024.09.30 |