배열
- fixed-size: 배열의 크기는 고정되어 있다.
- homogeneous: 한 배열에는 고정된 한 타입이 있다. (int, float, struct, pointer, ...)
- stored in a contiguous memory location: 메모리 상 연속적인 공간에 있다.
- 하나의 index와 하나의 value가 서로 짝을 이루고 있다.
int arr[5] = {1, 2, 3, 4, 5};
다차원 배열
// 2차원 배열 [행][열]
int arr2[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} };
printf("%d", arr2[1][3]) // 8 출력
// 3차원 배열
int arr3[2][3][2] = { { {1, 2}, {3, 4}, {5, 6} }, { {7, 8}, {9, 10}, {11, 12} } }
printf("%d", arr3[1][2][0]) // 11 출력
// 3차원 배열 순회
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
for (int k = 0; k < 2; k++) {
printf("%d ", arr3[i][j][k]);
}
printf("\n");
}
printf("\n");
}
배열과 포인터
포인터로 배열에 접근할 수 있다.
배열 이름 = 배열 첫 원소의 주소
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr;
printf("%d", arr[0]); // 1 출력
printf("%d", *ptr); // 1 출력
배열의 장점
- 연속적 메모리이기 때문에 접근이 쉽다. (random access가 편리)
- 접근하기 쉽기 때문에 값 수정이 쉽다.
- 접근하기 쉽기 때문에 순회가 쉽다.
배열의 단점
- 크기가 고정되어 있어서 메모리 크기 수정이 불가하다.
- 때문에 input size에 대한 유연성이 떨어진다.
- 배열의 요소가 모두 같은 타입이어야 하기 때문에 표현의 한계가 있다.
- 데이터 삽입과 삭제에 어려움이 있다.
배열의 단점을 보완한 동적 메모리 할당
정적 메모리 할당은 컴파일 시에 메모리 공간이 할당 되지만, 동적 메모리 할당은 런타임 시에 메모리 공간이 할당 됨
// malloc 사용 예시
int* ptr = (int*)malloc(5 * sizeof(int));
// calloc 사용 예시
int* ptr = (int*)calloc(5, sizeof(int));
// realloc 사용 예시(주어진 공간을 다시 할당)
int* ptr = (int*)realloc(ptr, 10 * sizeof(int));
// 동적 메모리 할당 해제 free
free(ptr);
동적 메모리 할당으로 2차원 배열 선언하기
int main() {
// 2차원 배열 만드는 과정
int row = 3; // 행 선언
int column = 4; // 열 선언
int** arr = (int**)malloc(row * sizeof(int*)); // 바깥 포인터 선언(행)
for (int i = 0; i < row; i++) { // 안쪽 포인터 선언(열)
arr[i] = (int*)malloc(column * sizeof(int));
}
// 2차원 배열에 값을 할당하는 과정: 정적 배열과 동일
// 동적 메모리 해제
for (int i = 0; i < row; i++) { // 안쪽 포인터 free
free(arr[i]);
}
free(arr) // 바깥 포인터 free
return 0;
}
'CS > 자료구조' 카테고리의 다른 글
[자료구조] Red-Black Tree 레드-블랙 트리 (0) | 2024.05.24 |
---|---|
[자료구조] AVL Tree C언어로 구현하기 (Insertion, Delete) (0) | 2024.04.18 |
[자료구조] Binary Search Tree (BST) C언어로 구현하기 (검색, 삽입, 삭제) (0) | 2024.04.09 |
[자료구조] Binary-Tree 이진 트리 C언어로 구현하기 (0) | 2024.04.06 |
[자료구조] Doubly Linked List (이중 연결 리스트) C언어로 구현하기 (0) | 2024.03.31 |