13. 구조체(struct), 열거형(enum), 동적 메모리 할당(malloc), 연결 리스트

2025. 12. 15. 12:09·Coding/C
  • 구조체 (structure)

배열 : 같은 자료형의 집합

구조체 : 다양한 자료형의 집합

>> 관련 있는 데이터를 하나의 단위(객체)로 표현

 

  • 열거형 (enumerate)

변수가 가질 수 있는 값의 종류가 한정된 경우(상태 코드, 요일 등), 의미 있는 이름(상수)를 부여하여 사용하는 자료형

- 내부적으로는 정수(int)로 처리

- 기본적으로 0부터 시작하여 1씩 증가(자동할당), 필요시 값 지정 가능

 

  • 동적 메모리 할당 (Dynamic Memory Allocation)

프로그램 실행 중에 필요한 만큼 메모리의 Heap 영역을 할당

>> 크기를 미리 알 수 없거나, 실행 중에 크기가 변하는 자료형(배열)에서 사용

- 동적 할당된 메모리는 프로그램이 끝날 때까지 유지되므로, 사용 후 해제하여 메모리 누수 방지 필요

 

  • 연결 리스트(linked list)

데이터와 다음 노드의 주소를 연결하는 노드들이 연결된 자료구조

+ 크기가 고정되지 않고, 동적으로 데이터를 추가/삭제할 수 있음

- 특정 요소에 접근하려면 처음부터 순차적으로 탐색해야 함 (O(N))

#include <stdio.h>
#include <stdlib.h>

struct node { // node 구조체 선언
    int value;
    struct node *next; // 구조체 포인터 next
};

// a->b == (*a).b
// -> 연산자는 '구조체 포인터'의 멤버에 접근

struct node *create_node(int value) { // node 구조체 포인터를 반환하는 함수
    struct node *new_node; // '구조체 포인터' new_node
    new_node = malloc(sizeof(struct node)); // 동적 메모리 할당
    new_node->value = value; // value는 값
    new_node->next = NULL; // next는 다음 node의 주소 (NULL로 초기화)
    return new_node;
}

void print_list(struct node *head) {
    struct node *current = head;
    while (current != NULL) {
        printf("%d", current->value);
        if (current->next == NULL) {
            printf(" -> NULL\n");
            return;
        }
        current = current->next;
        printf(" -> ");
    }
}

int search_node_index(struct node *head, int value) {
    struct node *current = head;
    int index = 0;
    while (current != NULL) {
        if (current->value == value) {
            return index;
        }
        index++;
        current = current->next;
    } return -1;
}

int main() {
    struct node *head = NULL;
    struct node *new_node = NULL;

    while (1) {
        int value;
        printf("Enter value: ");
        scanf("%d", &value);
        if (value == -1) {
            break;
        }
        new_node = create_node(value);
        new_node->next = head;
        head = new_node;
    }

    print_list(head);

    while (1) {
        int value;
        printf("Enter value to search: ");
        scanf("%d", &value);
        if (value == -1) {
            break;
        }
        int index = search_node_index(head, value);
        if (index == -1) {
            printf("Value not found\n");
        } else {
            printf("Value found at index %d\n", index);
        }
    }

    struct node *tmp = NULL;
    while (head != NULL) {
        tmp = head;
        head = head->next;
        free(tmp);
    };
    
    return 0;
}

'Coding > C' 카테고리의 다른 글

12. 문자열  (0) 2025.11.29
11. 포인터와 배열  (0) 2025.11.21
10. 포인터  (0) 2025.11.21
09. 변수의 범위와 지속기간  (0) 2025.11.21
08. 함수  (0) 2025.10.17
'Coding/C' 카테고리의 다른 글
  • 12. 문자열
  • 11. 포인터와 배열
  • 10. 포인터
  • 09. 변수의 범위와 지속기간
rlarudfhr
rlarudfhr
  • rlarudfhr
    androcom
    rlarudfhr
  • 전체
    오늘
    어제
    • 분류 전체보기 (96)
      • Coding (28)
        • Python (10)
        • C (13)
        • Github & Git (2)
        • WEB FE (3)
      • Mathematics (3)
        • 미적분학 (19)
        • 통계학 (16)
        • 선형대수 (10)
      • Quantum Computing (0)
      • PC & Mobile & Audio (7)
      • Etc (13)
  • 링크

    • Github
    • Baekjoon
    • Instagram
  • 공지사항

  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
rlarudfhr
13. 구조체(struct), 열거형(enum), 동적 메모리 할당(malloc), 연결 리스트
상단으로

티스토리툴바