본문 바로가기

C67

Chapter 06. 스택(Stack) 2.1 스택 기본 코드 #define _CRT_SECURE_NO_WARNINGS #include #include enum { FALSE = 0, TRUE = 1, INVALIED_INDEX = -1, MAX_COUNT = 100001 }; typedef struct stack { int nArray[MAX_COUNT]; size_t uTop; } stack_t; void push(stack_t* _pStack, int _nData); int isEmpty(stack_t* _pStack); int pop(stack_t* _pStack); int main(void) { return 0; } void push(stack_t* _pStack, int _nData) { assert(_pStack->uTop < M.. 2021. 11. 10.
Chapter 05. 가변 길이 배열(Variadic Array) 0. 가변 길이 배열 특징 - 사용할 메모리의 크기를 추가/축소가 가능함. 다만, 데이터를 이동(복붙)해야 하기에 오버헤드 발생. - 그래서 추가로 필요한 양보다 1.5배 정도 더 많이 할당받음. 그럼 나중에 더 필요하더라도 데이터 이동 횟수가 줄어듦. - 그래도 배열이기에, 중간 삽입 및 중간 삭제가 비효율적임. 중간에 삽입하면 밀어버리거나, 삭제하면 당겨와야하기 때문에. 1. 기본 코드 #define _CRT_SECURE_NO_WARNINGS #include #include #include enum { FALSE = 0, TRUE = 1, INVALIDE_INDEX = -1, INITIAL_CAPACITY = 8, INCREMENT = 2 }; typedef struct variadic_array {.. 2021. 11. 10.
Chapter 04. 배열(Array) 0. 배열의 특징 - 배열은 사용할 메모리 크기를 고정해서 선언해야 함. 선언 후에는 절대 변경 불가능함. 즉, 추가/축소가 불가능함. - 선언된 메모리는 연속적으로 할당됨. 1. 기본 코드 - 앞으로 연재될 모든 자료구조는 Clang C89 기준의 코드들로 이루어짐. 따라서, C가 가능하다면 모든 곳에서 될듯. - C 스타일의 배열을 그대로 사용하기엔 메모리 스탬프가 걱정됨. - 분할 컴파일을 통해서 배열을 아에 다른 파일에다가 정적으로 선언하고, 메모리 스탬프를 막을 정적 변수를 하나 더 선언 하고자 했음. - 그마저도 한 문제에 여러 개의 배열이 필요할 수 있어서, 그냥 정적 배열이 아닌 구조체를 사용함. 뭔가 아주 살짝의 문법 어필도 가능할듯? #define _CRT_SECURE_NO_WARNIN.. 2021. 11. 1.
Chapter 03. 정렬 Chapter 03. Sort Algorithm 3.0 정렬 알고리듬 3.0-0 정렬 알고리듬 - 목록 안에 저장된 요소들을 특정한 순서대로 재배치하는 알고리듬 - 정렬하는 이유 좀 더 효율적인 알고리듬을 사용하기 위해서 사람이 읽기 편하도록 등등 - 입력 데이터는 일반적으로 배열 같은 자료 구조에 저장 아무 위치로의 임의 접근이 용이함 cf. 링크드 리스트를 사용하면 처음 혹은 끝부터 차례로 훑어야 함. - 줄 세우는데 흔히 사용하는 순서: 숫자 순서, 사전 순서 정렬 방향: 오름차순, 내림차순 - 다양한 정렬 알고리듬이 있음 시간 복잡도 차이 메모리 사용량 차이 안정성(stability) 차이 직렬 Vs. 병렬 차이(이 과목에서는 직렬 정렬 알고리듬만.) 3.0-1 정렬 알고리듬의 안정성 - 안전성(.. 2021. 6. 18.