널널한 개발자 TV의 자료구조 강의 시리즈를 정리할 것이다.
자료구조는 C언어로 구현할 것인데, 먼저 본격적으로 자료구조에 대해 알아보기 전에 알아야할 것들을 알아보자
- 포인터(Pointer)는 메모리 주소를 저장할 목적의 변수이다.
- 간접 지정 연산으로 대상 메모리에 접근(혹은 참조)한다.
- 다중 포인터까지 이해하려 노력할 필요는 없다.
- 다중 포인터를 사용하지 않는 방향으로 프로그래밍을 하는 것이 좋다. -> 가독성이 떨어진다.
- 구조체는 기본 형식 자료 여러 개를 하나로 묶어 관리할 수 있는 유도형이다.
- 형(type) 재정의를 통해 선언을 간소화 할 수 있다.
- 보통 자료구조의 '자료'는 구조체 또는 자료형(변수) 등을 말하며, 자료구조는 이러한 자료를 어떻게 구조화할 것인가를 다루는 것이다.
C언어 함수 포인터
- 함수의 이름은 그 자체가 주소이다.
- 함수의 이름을 저장할 수 있는 포인터가 함수 포인터이다.
- 함수 포인터를 이용해 보다 간결한 코드를 만들 수 있다.
- 함수 포인터가 꼭 필요한 시점은 여러 사람이 함께 작업할 때이다.
함수 포인터 예제
#include <stdio.h>
int test(int a)
{
printf("test(): Hello World!\n");
return a;
}
int main(void)
{
test(5);
(int) (* pfTest)(int) = test;
pfTest(5);
return 0;
}
- 함수 내부에서 자신을 스스로 호출하는 구조이다.
- 논리 구조는 반복문과 같다.
- 반복을 끝내기 위한 조건을 신중히 생각해야 한다.
- Call stack을 활용하기 위해 사용한다.
- 이전 지점을 백업(backup)했다가 사용하는 느낌으로 사용
콜 스택(Call stack)
컴퓨터 프로그램에서 현재 실행 중인 서브루틴에 관한 정보를 저장하는 스택 자료구조이다.
실행 스택(execution stack), 제어 스택 (control stack), 런 타임 스택 (run-time) 스택 혹은 기계 스택 (machine stack) 이라고도 하며, 그냥 줄여서 스택 (the stack) 이라고도 한다.
기본적으로 콜 스택의 크기는 쓰레드 당 1 MB정도로 제한되어 있다.