자료구조란?
데이터에 편리하고 효율적으로 접근하고 변경하기 위해서 데이터를 조직, 관리, 저장하는 방법.
각 자료구조가 갖는 장점과 한계를 잘 아는 것이 중요.
(데이터를 알맞는 곳에!)
자료구조의 분류
이미지 출처 : http://key-to-programming.blogspot.com/2016/01/key-to-data-structure.html
Primitive Data Structure (단순구조)
: 프로그래밍에서 사용되는 기본 데이터 타입
Non-Primitive Data Structure (비단순구조)
: 단순한 데이터를 저장하는 구조가 아니라, 여러 데이터를 목적에 맞게 효과적으로 저장하는 자료 구조.
- Linear Data Structure (선형구조)
: 저장되는 자료의 전 후 관계가 1:1
- Non-Linear Data Structure (비선형구조)
: 데이터 항목 사의의 관계가 1:n 또는 n:m
자주 사용되는 자료구조
Array(JS), List(Python)
- 실제 메모리 옆에 저장되므로 순서가 있고, 인덱싱 가능
- 데이터를 빨리 읽어야 할 때 쓰기 좋으며, 가장 많이 사용됨
- Array Reaizing(새로운 메모리 확보, 할당)이 가능하긴 하나, 쉽지 않음
- 자주 삭제, 삽입 하는 경우, 데이터의 사이즈가 급변하는 경우에는 다른 걸 쓰는게 낫다
Tuple
- 순차 저장이 가능
- 2-5개의 적은 요소를 담을 때 사용
- 수정할 수 없음 (immutable)
- 함수 return 값 같이 적은 갯수를 빠르게 return 할 때 쓰면 좋음
Set
- hash 값을 bucket에 저장하기 때문에 순서가 없고, 중복 값도 없음.
- 가장 밑단에는 Array가 있음
- Bucket 수로 나는 나머지를 인덱스로 쓰며, 70% 이상 차면 Resizing을 해서 충돌을 피함.
Stack & Queue
- Stack : First In Last Out(FILO)
- 함수를 호출할 때, 브라우저에서 뒤로 갈 때 이용.
- Stack over flow의 그 Stack이며, Stack over flow는 무한루프를 돌 때 만날 수 있는 에러.
- Queue : First In First Out(FIFO)
- Priority Queue : 우선순위가 있는 Queue. 운영체제에서 급하게 돌려야하는 시스템이 있을 때 등에 사용.