- 구조체 (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 |