사이먼's 코딩노트

[C언어] linked List 본문

C언어

[C언어] linked List

simonpark817 2024. 2. 28. 23:44

[Linked List]

  • 문제 하나를 통해 링크드리스트에 대해서 살펴봅시다.
  • 문제의 목표는 구조체로 선언된 사람들을 서로 연결하여 하나의 리스트로 만들고 반복문으로 순회하는 프로그램을 구현하는 것입니다.
  • 문제 접근법은 아래의 여러가지 절차로 나눠 진행할 수 있습니다.

 

1단계 : 사람 구조체 생성 (개인의 구성요소는 이름, 나이, 사람의 위치)

2단계 : 사람 3명 생성 (구조체 변수 선언)

3단계 : 사람 3명 세팅 (이름, 나이, 위치 지정)

4단계 : 1번째 사람이 2번째 사람의 위치를 기억하고 2번째 사람이 3번째 사람의 위치를 기억

5단계 : 3번째 사람의 위치에는 NULL을 저장

6단계 : 반복문을 통해 3명의 이름과 나이를 출력

7단계 : 현재 작업중인 사람의 위치 변수에 NULL이 나올때 까지 반복하면서 다른 사람으로 이동

 

  • 위 단계별로 진행했을 때 완성되는 코드는 아래와 같다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct _Person {
    int age;
    char name[100];
    struct _Person* next;
} Person;

int main(void) {

    Person* p1 = malloc(sizeof(Person));
    Person* p2 = malloc(sizeof(Person));;
    Person* p3 = malloc(sizeof(Person));;

    strcpy(p1->name, "홍길동");
    p1->age = 11;
    p1->next = p2;

    strcpy(p2->name, "홍길순");
    p2->age = 22;
    p2->next = p3;

    strcpy(p3->name, "임꺽정");
    p3->age = 33;
    p3->next = NULL;

    Person* current = p1;

    for(int i = 0; current != NULL; i++) {
        printf("%d번 사람 : %s, %d살\n", i+1, current->name, current->age);

        current = current->next;
    }

    free(p1);
    free(p2);
    free(p3);

    return 0;
}
  • 문제의 요점을 간단하게 말하면 총 3명의 사람이 있고 출력문을 통해서 입력된 사람 3명의 정보만을 출력하고 프로그램을 종료시키는 것이다. 근데 각각의 사람은 그 다음 사람과 연결되어 있다.
  • 먼저 Person 이라는 구조체를 생성하고 나이(age), 이름(name), 위치(next) 변수를 생성한다.
  • 이 때, next는 Person 타입을 참조하는 포인터 변수로서 struct _Person* next와 같이 선언한다.
  • main 함수에서는 사람 p1, p2, p3를 포인터 변수로 선언과 동시에 동적 할당을 해준다.
  • 각 포인터 변수는 주소를 나타내기 때문에 '->' 를 이용하여 각 사람의 속성 값을 저장한다.
  • p1의 위치에는 p2의 주소를 담고, p2의 위치에는 p3의 주소를 담고 p3의 위치에는 그 다음 사람이 없기 때문에 null을 저장한다.
  • 그 다음은 현재 위치를 나타내는 포인터 변수인 current를 선언하고 첫번째 사람인 p1의 주소를 넣어준다.
  • 각 사람의 정보를 출력하기 위해서 반복문을 사용하고 반복문의 범위는 선언된 사람의 수 만큼이기 때문에 current의 값이 null일 때까지 계속 반복된다.
  • current 에는 최초로 첫번째 사람의 정보가 들어가 있기 때문에 그 다음 두번째 사람의 정보를 출력하기 위해서는 next 변수를 활용한다. [current = current->next]
  • 마지막으로 free()를 통해 동적 할당을 종료시킨다.

 

 

반응형