[WEEK05 - 3] 34일차. RB tree 구현

kozi·2023년 4월 2일
0

SW사관학교 정글

목록 보기
27/33

요즘 장염 + 몸살 때문에 컨디션이 좋지 않다.
이 글을 보시는 분들은 건강을 잘 챙겨서 아프지 않으시길 바란다.

어제는 rbtree 구현에 앞서서 rb tree가 어떤 시간 복잡도를 가지고 어떻게 동작하는지 영상을 통해 공부하였다.

참고 영상 1 - rb tree 기본 개념과 특징, 삽입 시 동작
참고 영상 2 - rb tree 삭제 시 동작, 시간 복잡도, AVL 트리와의 차이

처음으로 구현하는것은 new_rbtree()
rb 구조체의 생성 기능을 구현해야한다.
여러 개의 tree를 생성할 수 있어야 하고 각각 다른 내용들을 저장할 수 있어야 한다.

주어져있는 new_rbtree 에는 calloc() 함수가 기본으로 적혀있는데,
calloc에 대해 짚고 넘어가야겠다.

calloc()

'calloc()'은 요소 배열에 대한 메모리를 동적으로 할당하는 데 사용되는 C 프로그래밍 언어의 표준 라이브러리 함수다.

calloc()의 구문은 다음과 같다.

void* calloc(size_t num, size_t size);

num은 할당할 요소의 수, size는 각 요소의 크기를 지정한다.
이 함수는 성공하면 할당된 메모리에 대한 포인터를 반환하고 할당이 실패하면 NULL을 반환한다.

malloc() 과의 주요 차이점은 calloc()은 할당된 메모리를 0으로 초기화하는 반면, malloc()은 메모리를 초기화되지 않은(쓰레기 값을 포함한) 상태로 둔다.

calloc() 은 배열이나 구조체의 경우처럼 메모리를 사용하기 전에 메모리가 특정 값으로 초기화되었는지 확인해야 할 때 유용하다.

동적으로 할당된 메모리는 프로그램이 종료될 때까지 할당된 상태로 유지되며 그때까지 다른 용도로 사용할 수 없게 된다.
따라서 일반적으로 동적으로 할당된 메모리가 더 이상 필요하지 않을 때 'free()'를 사용해서 할당을 해제하는 게 좋다.

calloc()을 사용하여 5개의 정수 배열에 메모리를 할당한 다음 배열의 값을 인쇄하는 예시는 다음과 같다.

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

int main() {
   int* arr;
   int size = 5;
   
   arr = (int*)calloc(size, sizeof(int));
   
   if(arr == NULL) {
      printf("Memory allocation failed\n");
      return 1;
   }
   
   for(int i = 0; i < size; i++) {
      printf("%d ", arr[i]);
   }
   
   free(arr);
   return 0;
}

'calloc()'은 할당된 메모리를 0으로 초기화하므로 프로그램의 출력은 5개의 0이 된다. 할당된 메모리를 0으로 초기화해야 하기 때문에 calloc()이 malloc()보다 느리다. 따라서 메모리를 특정 값으로 초기화해야 하는 경우에만 calloc()을 사용해야 하고 그렇지 않을 때는 malloc()을 사용한다.

profile
어제보다 잘하고 싶은 개발자 Kozi 입니다.

0개의 댓글