예정 진도 ¶
0. Introduction of Data Structure
- 자료구조란?
- 자료구조(Data Structure) : 자료(data)를 효율적으로 이용할 수 있도록 컴퓨터에 저장하는 방법.
- 자료(data)
- 질적(qualitive)또는 양적(quantative)값의 집합으로 구성된 의미 단위.
- 자료를 의미 있게 정리한 것이 정보(information)
- 질적(qualitive)또는 양적(quantative)값의 집합으로 구성된 의미 단위.
- 자료(data)
- 자료구조와 알고리즘
- 알고리즘(algorithm) : 문제를 해결하기 위한 동작들의 유한한 순열.
- 즉, 문제를 푸는 방법
- 즉, 문제를 푸는 방법
- 알고리즘이 잘 동작하려면, 자료를 효율적으로 처리해야 함 -> 알고리즘에는 좋은 자료구조가 필요
- 자료를 효율적으로 처리하려면, 효율적인 알고리즘이 필요 -> 자료구조에는 좋은 알고리즘이 필요
- 즉, 알고리즘 <-> 자료구조
- 알고리즘(algorithm) : 문제를 해결하기 위한 동작들의 유한한 순열.
- Algorithms + Data Structures = Programs
- 자료구조(Data Structure) : 자료(data)를 효율적으로 이용할 수 있도록 컴퓨터에 저장하는 방법.
- 자료구조를 배워야 하는 이유
- 모-든 분야의 기초지식
- 알고리즘, 운영체제, 네트워크, 데이터베이스, PL, 그래픽 프로그래밍, 통계학, 보안, AI, ...
- 알고리즘, 운영체제, 네트워크, 데이터베이스, PL, 그래픽 프로그래밍, 통계학, 보안, AI, ...
- 좋은 자료구조를 사용하는 것 -> 좋은 프로그램을 만드는 것 -> 좋은 개발자가 되는 것
- 좋은 프로그래머와 나쁜 프로그래머의 차이는, 코드와 자료구조중 어느 쪽을 더 신경쓰냐는 것이다. 나쁜 프로그래머는 코드에 신경쓰고, 좋은 프로그래머는 자료구조와 그 관계에 대해 신경쓴다. - 리누스 토르발즈https://lwn.net/Articles/193245/
- 모-든 분야의 기초지식
- c언어 기초지식(c언어 마무리)
- 포인터, 동적 메모리 할당
- *, & 연산자
- void 포인터
- 배열과 포인터
- address
[
num]
==
*(
address+
num)
- void* malloc(size_t);
- void* calloc(size_t, size_t);
- void free(void*);
- 함수 포인터
- *, & 연산자
- 구조체, 공용체, 열거형(struct, union, enum)
- ., -> 연산자
- ., -> 연산자
- typedef
typedef
type new_typename
typedef
struct {/**/
} struct_name
- realloc, memset, memcpy
void* realloc(void*, size_t)
;
void* memset(void*, int, size_t)
;
void* memcpy(void*, const void*, size_t)
;
- 포인터, 동적 메모리 할당
- 자료구조/알고리즘 기초 지식
- 계산복잡도(complexity)
- 시간 복잡도(time complexity), 공간 복잡도(space complexity)
- 시간 복잡도(time complexity), 공간 복잡도(space complexity)
- big-O 표현법(big-O notation)
- 계산복잡도(complexity)